Commit 3bd4ed46 introduced this element as required which breaks backcompat for test driver. Let's make the element optional. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> --- docs/formatnode.html.in | 2 +- docs/schemas/nodedev.rng | 12 ++++++----- src/conf/node_device_conf.c | 23 +++++++++++----------- src/conf/node_device_conf.h | 2 +- src/node_device/node_device_udev.c | 2 +- .../pci_0000_02_10_7_sriov_pf_vfs_all.xml | 1 - 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in index 5095b97..c2a8f8f 100644 --- a/docs/formatnode.html.in +++ b/docs/formatnode.html.in @@ -71,7 +71,7 @@ include: <dl> <dt><code>class</code></dt> - <dd>Combined class, subclass and + <dd>Optional element for combined class, subclass and programming interface codes as 6-digit hexadecimal number. <span class="since">Since 5.2.0</span></dd> <dt><code>domain</code></dt> diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng index 0f45d79..fe6ffa0 100644 --- a/docs/schemas/nodedev.rng +++ b/docs/schemas/nodedev.rng @@ -133,11 +133,13 @@ <value>pci</value> </attribute> - <element name='class'> - <data type="string"> - <param name="pattern">0x[0-9a-fA-F]{6}</param> - </data> - </element> + <optional> + <element name='class'> + <data type="string"> + <param name="pattern">0x[0-9a-fA-F]{6}</param> + </data> + </element> + </optional> <element name='domain'> <ref name='unsignedLong'/> </element> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 19c601a..b96d10c 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -208,7 +208,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, { size_t i; - virBufferAsprintf(buf, "<class>0x%.6x</class>\n", data->pci_dev.klass); + if (data->pci_dev.klass >= 0) + virBufferAsprintf(buf, "<class>0x%.6x</class>\n", data->pci_dev.klass); virBufferAsprintf(buf, "<domain>%d</domain>\n", data->pci_dev.domain); virBufferAsprintf(buf, "<bus>%d</bus>\n", data->pci_dev.bus); @@ -1645,16 +1646,16 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, orignode = ctxt->node; ctxt->node = node; - if (virNodeDevCapsDefParseHexId("string(./class[1])", ctxt, - &pci_dev->klass, def, - _("no PCI class supplied for '%s'"), - _("invalid PCI class supplied for '%s'")) < 0) - goto out; - - if (pci_dev->klass > 0xffffff) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid PCI class supplied for '%s'"), def->name); - goto out; + if ((tmp = virXPathString("string(./class[1])", ctxt))) { + if (virStrToLong_i(tmp, NULL, 16, &pci_dev->klass) < 0 || + pci_dev->klass > 0xffffff) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid PCI class supplied for '%s'"), def->name); + goto out; + } + VIR_FREE(tmp); + } else { + pci_dev->klass = -1; } if (virNodeDevCapsDefParseULong("number(./domain[1])", ctxt, diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index b13bc13..e8cb315 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -153,7 +153,7 @@ struct _virNodeDevCapPCIDev { unsigned int function; unsigned int product; unsigned int vendor; - unsigned int klass; + int klass; char *product_name; char *vendor_name; virPCIDeviceAddressPtr physical_function; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index f0e61e4..5ed3463 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -402,7 +402,7 @@ udevProcessPCI(struct udev_device *device, privileged = driver->privileged; nodeDeviceUnlock(); - if (udevGetUintProperty(device, "PCI_CLASS", &pci_dev->klass, 16) < 0) + if (udevGetIntProperty(device, "PCI_CLASS", &pci_dev->klass, 16) < 0) goto cleanup; if ((p = strrchr(def->sysfs_path, '/')) == NULL || diff --git a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml index 74036a6..9e8dace 100644 --- a/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml +++ b/tests/nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml @@ -2,7 +2,6 @@ <name>pci_0000_02_10_7</name> <parent>pci_0000_00_04_0</parent> <capability type='pci'> - <class>0xffffff</class> <domain>0</domain> <bus>2</bus> <slot>16</slot> -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list