diff options
author | Zuul <zuul@review.opendev.org> | 2022-07-18 07:02:50 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-07-18 07:02:50 +0000 |
commit | 8097c2b2153ff952a266395d4e351fc39f914c6b (patch) | |
tree | 099f22a15e78e6db277ae0ee890f45f8ac0dedf2 | |
parent | d218250eb53791012f49825140e2592dab89e69c (diff) | |
parent | b87ced4a8d7179005e1db3d6b3e02a297285c734 (diff) | |
download | nova-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.py | 45 | ||||
-rw-r--r-- | nova/virt/libvirt/driver.py | 3 |
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 |