summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-07-18 07:02:50 +0000
committerGerrit Code Review <review@openstack.org>2022-07-18 07:02:50 +0000
commit8097c2b2153ff952a266395d4e351fc39f914c6b (patch)
tree099f22a15e78e6db277ae0ee890f45f8ac0dedf2
parentd218250eb53791012f49825140e2592dab89e69c (diff)
parentb87ced4a8d7179005e1db3d6b3e02a297285c734 (diff)
downloadnova-8097c2b2153ff952a266395d4e351fc39f914c6b.tar.gz
Merge "libvirt: make mdev types name attribute be optional" into stable/victoria
-rw-r--r--nova/tests/unit/virt/libvirt/test_driver.py45
-rw-r--r--nova/virt/libvirt/driver.py3
2 files changed, 47 insertions, 1 deletions
diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py
index 7576a6a60d..f947641c97 100644
--- a/nova/tests/unit/virt/libvirt/test_driver.py
+++ b/nova/tests/unit/virt/libvirt/test_driver.py
@@ -348,6 +348,29 @@ _fake_NodeDevXml = {
</capability>
</capability>
</device>""",
+ "pci_0000_06_00_1": """
+ <device>
+ <name>pci_0000_06_00_1</name>
+ <path>/sys/devices/pci0000:00/0000:00:06.1</path>
+ <parent></parent>
+ <driver>
+ <name>i915</name>
+ </driver>
+ <capability type="pci">
+ <domain>0</domain>
+ <bus>6</bus>
+ <slot>0</slot>
+ <function>1</function>
+ <product id="0x591d">HD Graphics P630</product>
+ <vendor id="0x8086">Intel Corporation</vendor>
+ <capability type='mdev_types'>
+ <type id='i915-GVTg_V5_8'>
+ <deviceAPI>vfio-pci</deviceAPI>
+ <availableInstances>2</availableInstances>
+ </type>
+ </capability>
+ </capability>
+ </device>""",
"mdev_4b20d080_1b54_4048_85b3_a6a62d165c01": """
<device>
<name>mdev_4b20d080_1b54_4048_85b3_a6a62d165c01</name>
@@ -25128,6 +25151,28 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin):
drvr._get_mdev_capable_devices(types=['nvidia-12']))
@mock.patch.object(host.Host, 'device_lookup_by_name')
+ def test_get_mdev_capabilities_for_dev_name_optional(
+ self, device_lookup_by_name):
+ # We use another PCI device that doesn't provide a name attribute for
+ # each mdev type.
+ def fake_nodeDeviceLookupByName(name):
+ return FakeNodeDevice(_fake_NodeDevXml[name])
+ device_lookup_by_name.side_effect = fake_nodeDeviceLookupByName
+
+ drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
+
+ expected = {"dev_id": "pci_0000_06_00_1",
+ "vendor_id": 0x8086,
+ "types": {'i915-GVTg_V5_8': {'availableInstances': 2,
+ 'name': None,
+ 'deviceAPI': 'vfio-pci'},
+ }
+ }
+ self.assertEqual(
+ expected,
+ drvr._get_mdev_capabilities_for_dev("pci_0000_06_00_1"))
+
+ @mock.patch.object(host.Host, 'device_lookup_by_name')
@mock.patch.object(host.Host, 'list_mediated_devices')
def test_get_mediated_devices(self, list_mediated_devices,
device_lookup_by_name):
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 2558a49f7d..8242065c89 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -7295,7 +7295,8 @@ class LibvirtDriver(driver.ComputeDriver):
if not types or cap['type'] in types:
device["types"].update({cap['type']: {
'availableInstances': cap['availableInstances'],
- 'name': cap['name'],
+ # This attribute is optional
+ 'name': cap.get('name'),
'deviceAPI': cap['deviceAPI']}})
return device