summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Bauza <sbauza@redhat.com>2020-09-23 12:52:52 +0200
committerLee Yarwood <lyarwood@redhat.com>2020-10-14 21:00:31 +0000
commitb87ced4a8d7179005e1db3d6b3e02a297285c734 (patch)
tree1286a5dc44e1bbd53d8c11ed694cf2b5d7d158a4
parent7baca2b1d1c6071b474fdf81c8c58687ac6afe2b (diff)
downloadnova-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.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 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