[libvirt] [PATCHv2 11/17] qemu: support new pci controller model "pcie-root-port"
Martin Kletzander
mkletzan at redhat.com
Fri Jul 24 16:14:06 UTC 2015
On Fri, Jul 17, 2015 at 02:43:38PM -0400, Laine Stump wrote:
>This is backed by the qemu device ioh3420.
>
>chassis and port from the <model> subelement are used to store/set the
>respective qemu device options for the ioh3420. Currently, chassis is
>set to be the index of the controller, and port is set to
>"(slot << 3) + function" (per suggestion from Alex Williamson).
>---
>src/qemu/qemu_command.c | 40 ++++++++++++++++++++++
> .../qemuxml2argv-pcie-root-port.args | 10 ++++++
> tests/qemuxml2argvtest.c | 7 ++++
> 3 files changed, 57 insertions(+)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args
>
>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>index 53f5317..1b86f1d 100644
>--- a/src/qemu/qemu_command.c
>+++ b/src/qemu/qemu_command.c
>@@ -4687,6 +4704,29 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef,
> virBufferAsprintf(&buf, "%s,id=%s",
> def->opts.pciopts.type, def->info.alias);
> break;
>+ case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT:
>+ if (!def->opts.pciopts.type) {
>+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>+ _("autogenerated pcie-root-port options not set"));
>+ goto error;
>+ }
I wonder how these errors can happen when the parsing itself will
always set them up.
>+ if (STREQ(def->opts.pciopts.type, "ioh3420")) {
>+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IOH3420)) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>+ _("the pcie-root-port (ioh3420) "
>+ "controller is not supported in this QEMU binary"));
>+ goto error;
>+ }
>+ } else {
>+ virReportError(VIR_ERR_INTERNAL_ERROR,
>+ _("unknown pcie-root-port device '%s'"),
>+ def->opts.pciopts.type);
>+ goto error;
>+ }
>+ virBufferAsprintf(&buf, "%s,port=0x%x,chassis=%d,id=%s",
>+ def->opts.pciopts.type, def->opts.pciopts.port,
>+ def->opts.pciopts.chassis, def->info.alias);
>+ break;
This whole hunk would be way shorter with the type stored as an enum
and even more with the pitched function.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150724/3bb2aede/attachment-0001.sig>
More information about the libvir-list
mailing list