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(a)virtuozzo.com>
---
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