[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