diff options
author | Sylvain Bauza <sbauza@redhat.com> | 2020-09-23 12:52:52 +0200 |
---|---|---|
committer | Lee Yarwood <lyarwood@redhat.com> | 2020-10-14 21:00:31 +0000 |
commit | b87ced4a8d7179005e1db3d6b3e02a297285c734 (patch) | |
tree | 1286a5dc44e1bbd53d8c11ed694cf2b5d7d158a4 | |
parent | 7baca2b1d1c6071b474fdf81c8c58687ac6afe2b (diff) | |
download | nova-b87ced4a8d7179005e1db3d6b3e02a297285c734.tar.gz |
libvirt: make mdev types name attribute be optional
Some GPU drivers like i915 don't provide a name attribute for mdev types.
As we don't use this attribute yet, let's just make sure we support the fact
it's optional.
Change-Id: Ia745ed7095c74e2bfba38379e623a3f81e7799eb
Closes-Bug: #1896741
(cherry picked from commit 416cd1ab18180fc09b915f4517aca03651f01eea)
-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 1a7e7b7d59..f1cd319b77 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> @@ -25000,6 +25023,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 4da0b5bff4..7860e43110 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -7246,7 +7246,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 |