This patch makes it possible to manually specify which VFIO variant
driver to use for PCI hostdev device assignment, so that, e.g. you
could force use of the generic vfio-pci driver with

  <driver name='vfio-pci'/>

when libvirt would have normally found a "better match" for a device
in the active kernel's modules.alias file. (The main use of this
manual override would be to work around a bug in a new VFIO variant
driver by temporarily not using that driver).

This sounds like a simple addition to XML parsing/formatting, but of
course it's messier than that, since the attribute we want to use was
previously used in config for a now non-existent purpose (choosing a
type of device assignment that was removed from the kernel nearly a
decade ago), and continues to be used *internal to the C code*.

Background:

Beginning when VFIO device assignment support was added to <hostdev>
or <interface type='hostdev'/>) in libvirt's QEMU driver, it was
possible to specify which device assignment backend to use with
"<driver name='vfio|kvm'/>". This was only useful for a couple of
years in the early 2010's when VFIO device assignment was newly
introduced, but "legacy KVM" device assignment was still possible (in
reality "<driver name='blah'/>" was only intended to be used (1) in
the *very* early days of VFIO when "kvm" was still the default, (2)
when the host kernel was too old to have VFIO support (meaning it was
e.g. pre-RHEL7) or (3) some bug was encountered with the then-new VFIO
code that could have been avoided by switching back to the older style
of device assignment (I don't recall anyone ever needing to set it for
this reason, but that is one of the main reasons we added the knob).

Later, when the libxl (Xen) driver in libvirt began supporting "device
passthrough" with <hostdev>, they added <driver name='xen'/> to
indicate that mode of operation. But in practice this was also never
necessary in any config, since Xen only supports one type of device
assignment, and so the attribute was anyway set in the C object by the
libxl driver code prior to calling any hypervisor-common code
(i.e. the stuff in hypervisor/hostdev.c and util/virpci.c) that needs
to know which type of device assignment is being used - setting it in
the XML config was superfluous (kind of like me saying "I am now
describing this patch in a human language", ref: Perd Hapley on "Parks
and Recreation").

So the setting was available in the XML, but never needed to be set by
the user. Because it was automatically set in the C code though,
sometimes libvirt-generated XML would contain the option even though
the user hadn't included it in the original input XML (e.g. the libxl
driver sets it in the PostParse, so all saved configs with a PCI
<hostdev> device will have <driver name='xen'/>; also status XML from
the QEMU and libxl drivers will contain <driver name='vfio|xen'/> - in
both cases completely unnecessary and redundant information).

When adding support for specifying a variant driver for VFIO device
assignment, from the beginning I have wanted to use <driver
name='blah'/> to force a specific variant driver (e.g. <driver
name='mlx5_vfio_pci'/>), with the assumption that the name attribute
could be easily repurposed because it had been *completely* unused for
so long. What I discovered though, was that 1) the field in the C
object corresponding to driver name was an enum value rather than a
string (so parser and formatter need to be changed, not just the
driver code looking at a string in the C object), and 2) even though
the XML attribute was effectively unused (except in some output), the
field in the C object was *always* being set internally as a way for
the hypervisor driver code to inform the hypervisor-common hostdev
manager (in src/hypervisor) which method of device assignment to
use. So re-use wasn't as simple as I'd wished.

However.

What I have hit upon that permits us to use
<driver name='mlx5_vfio_pci'/> is to do the following:

1) rename the existing driver name attribute to driver *type* - this
   will now be the enum that is set internally by the hypervisor
   driver prior to calling the hostdev manager (and also is what will
   show up in status XML; the libxl driver was modified in a previous
   patch so that the setting isn't done until domain runtime (rather
   than during PostParse), so it will no longer show up in
   regurgitated libxml config)

2) add a new attribute with the now-newly-unused name "name" - this
   will be a string that can be used to communicate a specific host
   kernel driver to the hostdev manager.

3) In the parsing code for <driver>, if <driver name='vfio|xen|kvm'/>
   is encountered, set the driver *type* to the appropriate enum
   instead, and clear our the name string. (since the four places
   that use the hostdev <driver> element now all call a common parser
   function, this check is only needed in a single place)

I could alternately just leave "name" as-is, and create a new
attribute with a never-before-used name within driver. I suppose
instead of "type" and "name", we could instead have "name and "model"
(where "model" would be the string that could be set to
"mlx5_vfio_pci"). I just prefer type/name to name/model, and think
it's been long enough since <driver name='blah'/> has had a useful
purpose (and the fixup for backward compatibility is limited to a few
lines in one function) that this change is safe.

(another alternate would be to add an extra parameter to the C API
that calls into the hostdev manager rather than keeping/adding the
publicly visible "type" attribute, but it seems at least possible that
sometime in the future another alternate "type" of device assignment
could be introduced for either Xen or QEMU, and we would then need to
add back the XML attribute anyway)

I'd be fine with doing it one of the other ways, but decided to post
this way first, since it's the one that I find the most aesthetically
pleasing :-)

Note that a few test cases have been modified - places where an
existing "name='vfio'" were changed to "type='vfio'" were in in status
XML or only the *output* XML for a test (except the case of the
virnetworkportxml2xmltest, which doesn't have a separate directory for
the XML result; fortunately the converged parsing of <driver> between
domain/network/networkport means that the test cases for network and
domain XML are already testing the same code that would convert "name"
to "type" in thte networkport XML)

Signed-off-by: Laine Stump <la...@redhat.com>
---
 src/conf/device_conf.c                        | 29 +++++++++++++++++--
 src/conf/device_conf.h                        |  4 +++
 src/conf/domain_conf.c                        |  1 +
 src/conf/network_conf.c                       |  2 ++
 src/conf/schemas/basictypes.rng               | 21 +++++++++-----
 src/conf/virnetworkportdef.c                  |  1 +
 tests/networkxml2xmlin/hostdev-pf-old.xml     |  8 +++++
 tests/networkxml2xmlin/hostdev-pf.xml         |  2 +-
 tests/networkxml2xmlout/hostdev-pf-old.xml    |  8 +++++
 tests/networkxml2xmlout/hostdev-pf.xml        |  2 +-
 tests/networkxml2xmltest.c                    |  6 ++++
 .../qemuhotplug-hostdev-pci.xml               |  1 -
 .../qemuhotplug-base-live+hostdev-pci.xml     |  2 +-
 ...uhotplug-pseries-base-live+hostdev-pci.xml |  2 +-
 tests/qemustatusxml2xmldata/modern-in.xml     |  2 +-
 .../hostdev-vfio.x86_64-latest.args           |  5 +++-
 tests/qemuxml2argvdata/hostdev-vfio.xml       | 18 ++++++++++++
 .../hostdev-vfio.x86_64-latest.xml            | 23 ++++++++++++++-
 .../plug-hostdev-pci-unmanaged.xml            |  2 +-
 .../plug-hostdev-pci.xml                      |  2 +-
 20 files changed, 122 insertions(+), 19 deletions(-)
 create mode 100644 tests/networkxml2xmlin/hostdev-pf-old.xml
 create mode 100644 tests/networkxml2xmlout/hostdev-pf-old.xml

diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
index e022783816..2ad7232678 100644
--- a/src/conf/device_conf.c
+++ b/src/conf/device_conf.c
@@ -60,13 +60,29 @@ int
 virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node,
                                       virDeviceHostdevPCIDriverInfo *driver)
 {
-    if (virXMLPropEnum(node, "name",
+    if (virXMLPropEnum(node, "type",
                        virDeviceHostdevPCIDriverTypeFromString,
                        VIR_XML_PROP_NONZERO,
                        &driver->type) < 0) {
         return -1;
     }
 
+    driver->name = virXMLPropString(node, "name");
+
+    /* translate special case of <driver name='vfio|xen|kvm'/> to
+     * <driver type='vfio|xen|kvm'/> for backward compatibility
+     */
+    if (STREQ_NULLABLE(driver->name, "vfio")) {
+        driver->type = VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_VFIO;
+        VIR_FREE(driver->name);
+    } else if (STREQ_NULLABLE(driver->name, "xen")) {
+        driver->type = VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_XEN;
+        VIR_FREE(driver->name);
+    } else if (STREQ_NULLABLE(driver->name, "kvm")) {
+        driver->type = VIR_DEVICE_HOSTDEV_PCI_DRIVER_TYPE_KVM;
+        VIR_FREE(driver->name);
+    }
+
     return 0;
 }
 
@@ -88,14 +104,23 @@ virDeviceHostdevPCIDriverInfoFormat(virBuffer *buf,
             return -1;
         }
 
-        virBufferAsprintf(&driverAttrBuf, " name='%s'", driverType);
+        virBufferAsprintf(&driverAttrBuf, " type='%s'", driverType);
     }
 
+    virBufferEscapeString(&driverAttrBuf, " name='%s'", driver->name);
+
     virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
     return 0;
 }
 
 
+void
+virDeviceHostdevPCIDriverInfoClear(virDeviceHostdevPCIDriverInfo *driver)
+{
+    VIR_FREE(driver->name);
+}
+
+
 static int
 virZPCIDeviceAddressParseXML(xmlNodePtr node,
                              virPCIDeviceAddress *addr)
diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h
index 9f4b9f5375..cccc60cb29 100644
--- a/src/conf/device_conf.h
+++ b/src/conf/device_conf.h
@@ -46,6 +46,7 @@ VIR_ENUM_DECL(virDeviceHostdevPCIDriver);
 
 struct _virDeviceHostdevPCIDriverInfo {
     virDeviceHostdevPCIDriverType type;
+    char *name;
 };
 
 typedef enum {
@@ -192,6 +193,9 @@ int virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node,
 int virDeviceHostdevPCIDriverInfoFormat(virBuffer *buf,
                                         const virDeviceHostdevPCIDriverInfo 
*driver);
 
+void virDeviceHostdevPCIDriverInfoPostParse(virDeviceHostdevPCIDriverInfo 
*driver);
+void virDeviceHostdevPCIDriverInfoClear(virDeviceHostdevPCIDriverInfo *driver);
+
 void virDomainDeviceInfoClear(virDomainDeviceInfo *info);
 void virDomainDeviceInfoFree(virDomainDeviceInfo *info);
 
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index eb2df9f30a..3c39257af0 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2635,6 +2635,7 @@ virDomainHostdevDefClear(virDomainHostdevDef *def)
             VIR_FREE(def->source.subsys.u.scsi_host.wwpn);
             break;
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
+            
virDeviceHostdevPCIDriverInfoClear(&def->source.subsys.u.pci.driver);
             g_clear_pointer(&def->source.subsys.u.pci.origstates, 
virBitmapFree);
             break;
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 43e7c78e95..4a2d887c77 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -229,6 +229,8 @@ virNetworkForwardDefClear(virNetworkForwardDef *def)
 {
     size_t i;
 
+    virDeviceHostdevPCIDriverInfoClear(&def->driver);
+
     for (i = 0; i < def->npfs && def->pfs; i++)
         virNetworkForwardPfDefClear(&def->pfs[i]);
     VIR_FREE(def->pfs);
diff --git a/src/conf/schemas/basictypes.rng b/src/conf/schemas/basictypes.rng
index 8d5f4475ca..46e8a493f7 100644
--- a/src/conf/schemas/basictypes.rng
+++ b/src/conf/schemas/basictypes.rng
@@ -658,13 +658,20 @@
 
   <define name="hostdevDriver">
     <element name="driver">
-      <attribute name="name">
-        <choice>
-          <value>kvm</value>
-          <value>vfio</value>
-          <value>xen</value>
-        </choice>
-      </attribute>
+      <optional>
+        <attribute name="type">
+          <choice>
+            <value>kvm</value>
+            <value>vfio</value>
+            <value>xen</value>
+          </choice>
+        </attribute>
+      </optional>
+      <optional>
+        <attribute name="name">
+          <ref name="genericName"/>
+        </attribute>
+      </optional>
       <empty/>
     </element>
   </define>
diff --git a/src/conf/virnetworkportdef.c b/src/conf/virnetworkportdef.c
index 67911e498e..db15729044 100644
--- a/src/conf/virnetworkportdef.c
+++ b/src/conf/virnetworkportdef.c
@@ -64,6 +64,7 @@ virNetworkPortDefFree(virNetworkPortDef *def)
         break;
 
     case VIR_NETWORK_PORT_PLUG_TYPE_HOSTDEV_PCI:
+        virDeviceHostdevPCIDriverInfoClear(&def->plug.hostdevpci.driver);
         break;
 
     case VIR_NETWORK_PORT_PLUG_TYPE_LAST:
diff --git a/tests/networkxml2xmlin/hostdev-pf-old.xml 
b/tests/networkxml2xmlin/hostdev-pf-old.xml
new file mode 100644
index 0000000000..5b8f59858c
--- /dev/null
+++ b/tests/networkxml2xmlin/hostdev-pf-old.xml
@@ -0,0 +1,8 @@
+<network>
+  <name>hostdev</name>
+  <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
+  <forward mode='hostdev' managed='yes'>
+    <driver name='vfio'/>
+    <pf dev='eth2'/>
+  </forward>
+</network>
diff --git a/tests/networkxml2xmlin/hostdev-pf.xml 
b/tests/networkxml2xmlin/hostdev-pf.xml
index 5b8f59858c..72a3049800 100644
--- a/tests/networkxml2xmlin/hostdev-pf.xml
+++ b/tests/networkxml2xmlin/hostdev-pf.xml
@@ -2,7 +2,7 @@
   <name>hostdev</name>
   <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
   <forward mode='hostdev' managed='yes'>
-    <driver name='vfio'/>
+    <driver type='vfio'/>
     <pf dev='eth2'/>
   </forward>
 </network>
diff --git a/tests/networkxml2xmlout/hostdev-pf-old.xml 
b/tests/networkxml2xmlout/hostdev-pf-old.xml
new file mode 100644
index 0000000000..72a3049800
--- /dev/null
+++ b/tests/networkxml2xmlout/hostdev-pf-old.xml
@@ -0,0 +1,8 @@
+<network>
+  <name>hostdev</name>
+  <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
+  <forward mode='hostdev' managed='yes'>
+    <driver type='vfio'/>
+    <pf dev='eth2'/>
+  </forward>
+</network>
diff --git a/tests/networkxml2xmlout/hostdev-pf.xml 
b/tests/networkxml2xmlout/hostdev-pf.xml
index 5b8f59858c..72a3049800 100644
--- a/tests/networkxml2xmlout/hostdev-pf.xml
+++ b/tests/networkxml2xmlout/hostdev-pf.xml
@@ -2,7 +2,7 @@
   <name>hostdev</name>
   <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid>
   <forward mode='hostdev' managed='yes'>
-    <driver name='vfio'/>
+    <driver type='vfio'/>
     <pf dev='eth2'/>
   </forward>
 </network>
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index b0814c7529..928f28b579 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -146,6 +146,12 @@ mymain(void)
     DO_TEST_FLAGS("passthrough-pf", VIR_NETWORK_XML_INACTIVE);
     DO_TEST("hostdev");
     DO_TEST_FLAGS("hostdev-pf", VIR_NETWORK_XML_INACTIVE);
+
+    /* libvirt pre-9.9.0 used "name='vfio'" which should be
+     * automatically translated to "type='vfio'" by new parser
+     */
+    DO_TEST_FLAGS("hostdev-pf-old", VIR_NETWORK_XML_INACTIVE);
+
     DO_TEST("passthrough-address-crash");
     DO_TEST("nat-network-explicit-flood");
     DO_TEST("host-bridge-no-flood");
diff --git a/tests/qemuhotplugtestdevices/qemuhotplug-hostdev-pci.xml 
b/tests/qemuhotplugtestdevices/qemuhotplug-hostdev-pci.xml
index 6f7c99c943..0d6dec9d26 100644
--- a/tests/qemuhotplugtestdevices/qemuhotplug-hostdev-pci.xml
+++ b/tests/qemuhotplugtestdevices/qemuhotplug-hostdev-pci.xml
@@ -1,5 +1,4 @@
 <hostdev mode='subsystem' type='pci' managed='yes'>
-  <driver name='vfio'/>
   <source>
     <address domain='0x0000' bus='0x06' slot='0x12' function='0x2'/>
   </source>
diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-live+hostdev-pci.xml 
b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+hostdev-pci.xml
index e49e21c53e..b14f184044 100644
--- a/tests/qemuhotplugtestdomains/qemuhotplug-base-live+hostdev-pci.xml
+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+hostdev-pci.xml
@@ -49,7 +49,7 @@
     </input>
     <audio id='1' type='none'/>
     <hostdev mode='subsystem' type='pci' managed='yes'>
-      <driver name='vfio'/>
+      <driver type='vfio'/>
       <source>
         <address domain='0x0000' bus='0x06' slot='0x12' function='0x2'/>
       </source>
diff --git 
a/tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+hostdev-pci.xml 
b/tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+hostdev-pci.xml
index 13d10e57aa..02b66a3590 100644
--- a/tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+hostdev-pci.xml
+++ b/tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+hostdev-pci.xml
@@ -41,7 +41,7 @@
     </input>
     <audio id='1' type='none'/>
     <hostdev mode='subsystem' type='pci' managed='yes'>
-      <driver name='vfio'/>
+      <driver type='vfio'/>
       <source>
         <address domain='0x0000' bus='0x06' slot='0x12' function='0x2'/>
       </source>
diff --git a/tests/qemustatusxml2xmldata/modern-in.xml 
b/tests/qemustatusxml2xmldata/modern-in.xml
index 67e0aa4952..299046331e 100644
--- a/tests/qemustatusxml2xmldata/modern-in.xml
+++ b/tests/qemustatusxml2xmldata/modern-in.xml
@@ -502,7 +502,7 @@
         <address type='drive' controller='0' bus='0' target='2' unit='4'/>
       </hostdev>
       <hostdev mode='subsystem' type='pci' managed='yes'>
-        <driver name='vfio'/>
+        <driver type='vfio'/>
         <source>
           <address domain='0x0005' bus='0x90' slot='0x01' function='0x2'/>
           <origstates>
diff --git a/tests/qemuxml2argvdata/hostdev-vfio.x86_64-latest.args 
b/tests/qemuxml2argvdata/hostdev-vfio.x86_64-latest.args
index c1f9258844..8529cde269 100644
--- a/tests/qemuxml2argvdata/hostdev-vfio.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/hostdev-vfio.x86_64-latest.args
@@ -32,6 +32,9 @@ 
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest2/.config \
 -device 
'{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-format","id":"ide0-0-0","bootindex":1}'
 \
 -audiodev '{"id":"audio1","driver":"none"}' \
 -device 
'{"driver":"vfio-pci","host":"0000:06:12.1","id":"hostdev0","bus":"pci.0","addr":"0x2"}'
 \
--device 
'{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x3"}' \
+-device 
'{"driver":"vfio-pci","host":"0000:06:12.2","id":"hostdev1","bus":"pci.0","addr":"0x3"}'
 \
+-device 
'{"driver":"vfio-pci","host":"0000:06:12.3","id":"hostdev2","bus":"pci.0","addr":"0x4"}'
 \
+-device 
'{"driver":"vfio-pci","host":"0000:06:12.4","id":"hostdev3","bus":"pci.0","addr":"0x5"}'
 \
+-device 
'{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x6"}' \
 -sandbox 
on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
 -msg timestamp=on
diff --git a/tests/qemuxml2argvdata/hostdev-vfio.xml 
b/tests/qemuxml2argvdata/hostdev-vfio.xml
index a03870f6e0..609714ab06 100644
--- a/tests/qemuxml2argvdata/hostdev-vfio.xml
+++ b/tests/qemuxml2argvdata/hostdev-vfio.xml
@@ -29,6 +29,24 @@
         <address domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
       </source>
     </hostdev>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver type='vfio'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x2'/>
+      </source>
+    </hostdev>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver name='vfio'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x3'/>
+      </source>
+    </hostdev>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver name='vfio-pci-igb'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x4'/>
+      </source>
+    </hostdev>
     <memballoon model='virtio'/>
   </devices>
 </domain>
diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio.x86_64-latest.xml 
b/tests/qemuxml2xmloutdata/hostdev-vfio.x86_64-latest.xml
index 3915b515f2..bae07de8d2 100644
--- a/tests/qemuxml2xmloutdata/hostdev-vfio.x86_64-latest.xml
+++ b/tests/qemuxml2xmloutdata/hostdev-vfio.x86_64-latest.xml
@@ -39,8 +39,29 @@
       </source>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' 
function='0x0'/>
     </hostdev>
-    <memballoon model='virtio'>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver type='vfio'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x2'/>
+      </source>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 
function='0x0'/>
+    </hostdev>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver type='vfio'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x3'/>
+      </source>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
function='0x0'/>
+    </hostdev>
+    <hostdev mode='subsystem' type='pci' managed='yes'>
+      <driver name='vfio-pci-igb'/>
+      <source>
+        <address domain='0x0000' bus='0x06' slot='0x12' function='0x4'/>
+      </source>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' 
function='0x0'/>
+    </hostdev>
+    <memballoon model='virtio'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 
function='0x0'/>
     </memballoon>
   </devices>
 </domain>
diff --git a/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml 
b/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml
index da5f568031..5d9f7cae73 100644
--- a/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml
+++ b/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml
@@ -6,7 +6,7 @@
   </owner>
   <mac address='52:54:00:7b:35:93'/>
   <plug type='hostdev-pci' managed='no'>
-    <driver name='vfio'/>
+    <driver type='vfio'/>
     <address domain='0x0001' bus='0x02' slot='0x03' function='0x4'/>
   </plug>
 </networkport>
diff --git a/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml 
b/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml
index cc4419f3fd..d216fc916e 100644
--- a/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml
+++ b/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml
@@ -6,7 +6,7 @@
   </owner>
   <mac address='52:54:00:7b:35:93'/>
   <plug type='hostdev-pci' managed='yes'>
-    <driver name='vfio'/>
+    <driver type='vfio'/>
     <address domain='0x0001' bus='0x02' slot='0x03' function='0x4'/>
   </plug>
 </networkport>
-- 
2.41.0

Reply via email to