From b87ced4a8d7179005e1db3d6b3e02a297285c734 Mon Sep 17 00:00:00 2001 From: Sylvain Bauza Date: Wed, 23 Sep 2020 12:52:52 +0200 Subject: 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) --- nova/tests/unit/virt/libvirt/test_driver.py | 45 +++++++++++++++++++++++++++++ nova/virt/libvirt/driver.py | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) 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 @@ -347,6 +347,29 @@ _fake_NodeDevXml = { + """, + "pci_0000_06_00_1": """ + + pci_0000_06_00_1 + /sys/devices/pci0000:00/0000:00:06.1 + + + i915 + + + 0 + 6 + 0 + 1 + HD Graphics P630 + Intel Corporation + + + vfio-pci + 2 + + + """, "mdev_4b20d080_1b54_4048_85b3_a6a62d165c01": """ @@ -24999,6 +25022,28 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): self.assertEqual([], 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, 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 -- cgit v1.2.1