Skip to content

Commit b87ced4

Browse files
sbauzalyarwood
authored andcommitted
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 416cd1a)
1 parent 7baca2b commit b87ced4

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

nova/tests/unit/virt/libvirt/test_driver.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,29 @@
347347
</type>
348348
</capability>
349349
</capability>
350+
</device>""",
351+
"pci_0000_06_00_1": """
352+
<device>
353+
<name>pci_0000_06_00_1</name>
354+
<path>/sys/devices/pci0000:00/0000:00:06.1</path>
355+
<parent></parent>
356+
<driver>
357+
<name>i915</name>
358+
</driver>
359+
<capability type="pci">
360+
<domain>0</domain>
361+
<bus>6</bus>
362+
<slot>0</slot>
363+
<function>1</function>
364+
<product id="0x591d">HD Graphics P630</product>
365+
<vendor id="0x8086">Intel Corporation</vendor>
366+
<capability type='mdev_types'>
367+
<type id='i915-GVTg_V5_8'>
368+
<deviceAPI>vfio-pci</deviceAPI>
369+
<availableInstances>2</availableInstances>
370+
</type>
371+
</capability>
372+
</capability>
350373
</device>""",
351374
"mdev_4b20d080_1b54_4048_85b3_a6a62d165c01": """
352375
<device>
@@ -24999,6 +25022,28 @@ def fake_nodeDeviceLookupByName(name):
2499925022
self.assertEqual([],
2500025023
drvr._get_mdev_capable_devices(types=['nvidia-12']))
2500125024

25025+
@mock.patch.object(host.Host, 'device_lookup_by_name')
25026+
def test_get_mdev_capabilities_for_dev_name_optional(
25027+
self, device_lookup_by_name):
25028+
# We use another PCI device that doesn't provide a name attribute for
25029+
# each mdev type.
25030+
def fake_nodeDeviceLookupByName(name):
25031+
return FakeNodeDevice(_fake_NodeDevXml[name])
25032+
device_lookup_by_name.side_effect = fake_nodeDeviceLookupByName
25033+
25034+
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
25035+
25036+
expected = {"dev_id": "pci_0000_06_00_1",
25037+
"vendor_id": 0x8086,
25038+
"types": {'i915-GVTg_V5_8': {'availableInstances': 2,
25039+
'name': None,
25040+
'deviceAPI': 'vfio-pci'},
25041+
}
25042+
}
25043+
self.assertEqual(
25044+
expected,
25045+
drvr._get_mdev_capabilities_for_dev("pci_0000_06_00_1"))
25046+
2500225047
@mock.patch.object(host.Host, 'device_lookup_by_name')
2500325048
@mock.patch.object(host.Host, 'list_mediated_devices')
2500425049
def test_get_mediated_devices(self, list_mediated_devices,

nova/virt/libvirt/driver.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7246,7 +7246,8 @@ def _get_mdev_capabilities_for_dev(self, devname, types=None):
72467246
if not types or cap['type'] in types:
72477247
device["types"].update({cap['type']: {
72487248
'availableInstances': cap['availableInstances'],
7249-
'name': cap['name'],
7249+
# This attribute is optional
7250+
'name': cap.get('name'),
72507251
'deviceAPI': cap['deviceAPI']}})
72517252
return device
72527253

0 commit comments

Comments
 (0)