[libvirt] [PATCHv3 06/13] conf: new pci controller model "pcie-root-port"

Martin Kletzander mkletzan at redhat.com
Mon Aug 3 10:37:07 UTC 2015


On Mon, Aug 03, 2015 at 12:17:45PM +0200, Martin Kletzander wrote:
>On Sat, Jul 25, 2015 at 03:58:30PM -0400, Laine Stump wrote:
>>This controller can be connected (at domain startup time only - not
>>hotpluggable) only to a port on the pcie root complex ("pcie-root" in
>>libvirt config), hence the new connect type
>>VIR_PCI_CONNECT_TYPE_PCIE_ROOT. It provides a hotpluggable port that
>>will accept any PCI or PCIe device.
>>
>>New attributes must be added to the controller <target> subelement for
>>this - chassis and port are guest-visible option values that will be
>>set by libvirt with values derived from the controller's index and pci
>>address information.
>>---
>>change from V2:
>>
>>* check chassis/port for 0-255 range
>>* 1.3.0 -> 1.2.18
>>
>>docs/formatdomain.html.in                          | 33 +++++++++-
>>docs/schemas/domaincommon.rng                      | 13 ++++
>>src/conf/domain_addr.c                             | 10 ++-
>>src/conf/domain_addr.h                             |  5 +-
>>src/conf/domain_conf.c                             | 75 +++++++++++++++++++++-
>>src/conf/domain_conf.h                             |  8 ++-
>>src/qemu/qemu_command.c                            |  1 +
>>.../qemuxml2argv-pcie-root-port.xml                | 36 +++++++++++
>>tests/qemuxml2xmltest.c                            |  1 +
>>9 files changed, 173 insertions(+), 9 deletions(-)
>>create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.xml
>>
>>diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>>index fdf7e82..a9db924 100644
>>--- a/docs/formatdomain.html.in
>>+++ b/docs/formatdomain.html.in
>>@@ -3123,6 +3141,17 @@
>>      auto-determined by libvirt will be placed on this pci-bridge
>>      device.  (<span class="since">since 1.1.2</span>).
>>    </p>
>>+    <p>
>>+      Domains with an implicit pcie-root can also add controllers
>>+      with <code>model='pcie-root-port'</code>. This is a simple type of
>>+      bridge device that can connect only to one of the 31 slots on
>>+      the pcie-root bus on the upstream side, and makes a single
>>+      (PCIe, hotpluggable) port (at slot='0') available on the
>>+      downstream side. This controller can be used to provide a single
>>+      slot to later hotplug a PCIe device (but is not itself
>>+      hotpluggable - it must be in the configuration when the domain
>>+      is started). (<span class="since">since 1.2.18</span>)
>
>s/18/19/
>
>>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>>index fbad7e9..f1723c0 100644
>>--- a/src/conf/domain_conf.c
>>+++ b/src/conf/domain_conf.c
>>@@ -7972,6 +7980,57 @@ virDomainControllerDefParseXML(xmlNodePtr node,
>>                goto error;
>>            }
>>        }
>>+        if (chassis) {
>>+            if (virStrToLong_i(chassis, NULL, 0,
>>+                               &def->opts.pciopts.chassis) < 0) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("Invalid chassis '%s' in PCI controller"),
>>+                               chassis);
>>+                goto error;
>>+            }
>>+            if (def->opts.pciopts.chassis < 0 ||
>>+                def->opts.pciopts.chassisNr > 255) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("PCI controller chassis '%s' out of range "
>>+                                 "- must be 0-255"),
>>+                               chassis);
>>+                goto error;
>>+            }
>>+        }
>
>This gets parsed twice, up here ^^ and down here vv, copy-paste error?
>Remove one of those, please.  I, personally don't care much which one,
>none of them is my favourite :)
>

Well, John has a favourite, though.  And it makes sense as well... The
upper one is comparing chassisNr > 255 but it should be 'chassis'
instead, I totally missed that.  Thanks John!

>ACK with that changed
>
>>+        if (chassis) {
>>+            if (virStrToLong_i(chassis, NULL, 0,
>>+                               &def->opts.pciopts.chassis) < 0) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("Invalid chassis '%s' in PCI controller"),
>>+                               chassis);
>>+                goto error;
>>+            }
>>+            if (def->opts.pciopts.chassis < 0 ||
>>+                def->opts.pciopts.chassis > 255) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("PCI controller chassis '%s' out of range "
>>+                                 "- must be 0-255"),
>>+                               chassis);
>>+                goto error;
>>+            }
>>+        }
>>+        if (port) {
>>+            if (virStrToLong_i(port, NULL, 0,
>>+                               &def->opts.pciopts.port) < 0) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("Invalid port '%s' in PCI controller"),
>>+                               port);
>>+                goto error;
>>+            }
>>+            if (def->opts.pciopts.port < 0 ||
>>+                def->opts.pciopts.port > 255) {
>>+                virReportError(VIR_ERR_XML_ERROR,
>>+                               _("PCI controller port '%s' out of range "
>>+                                 "- must be 0-255"),
>>+                               port);
>>+                goto error;
>>+            }
>>+        }
>>        break;
>>
>>    default:



>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- 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/20150803/226ec872/attachment-0001.sig>


More information about the libvir-list mailing list