Blame SOURCES/virt-manager-Handle-new-nodedev-name-for-mediated-devices.patch

01947c
From 3e150cab1c478e1ce95f4f1466ecbac0b693e375 Mon Sep 17 00:00:00 2001
01947c
From: Jonathon Jongsma <jjongsma@redhat.com>
01947c
Date: Tue, 26 Oct 2021 14:18:40 -0500
01947c
Subject: [PATCH] Handle new nodedev name for mediated devices
01947c
01947c
libvirt recently changed the nodedev names for mediated devices due to
01947c
the fact that mdevctl supports defining multiple mediated devices with
01947c
the same UUID as long as only one is active at a time. This means that
01947c
the nodedev name changed from the format 'mdev_$UUID' to the format
01947c
'mdev_$UUID_$PARENT'.
01947c
01947c
Unfortunately, virt-install was parsing the nodedev name to extract the
01947c
UUID of a mediated device. This fails with the new name format.
01947c
Fortunately, in libvirt 7.3.0, a <uuid> field was added to the xml
01947c
schema for mdev devices, so we can simply use this instead, and fall
01947c
back to the name parsing if it doesn't exist.
01947c
01947c
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
01947c
(cherry picked from commit 0c146b250384ddddcefd2cc0d76b9e808377ebe5)
01947c
01947c
https://bugzilla.redhat.com/show_bug.cgi?id=2020241
01947c
01947c
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
01947c
---
01947c
 tests/data/testdriver/testdriver.xml | 14 ++++++++++++++
01947c
 tests/test_nodedev.py                | 14 ++++++++++++++
01947c
 virtinst/nodedev.py                  |  7 +++++++
01947c
 3 files changed, 35 insertions(+)
01947c
01947c
diff --git a/tests/data/testdriver/testdriver.xml b/tests/data/testdriver/testdriver.xml
01947c
index 5875732a..e4880936 100644
01947c
--- a/tests/data/testdriver/testdriver.xml
01947c
+++ b/tests/data/testdriver/testdriver.xml
01947c
@@ -3725,4 +3725,18 @@ ba</description>
01947c
   </capability>
01947c
 </device>
01947c
 
01947c
+<device>
01947c
+  <name>mdev_35ceae7f_eea5_4f28_b7f3_7b12a3e62d3c_0000_06_00_0</name>
01947c
+  <path>/sys/devices/pci0000:00/0000:00:02.0/35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c</path>
01947c
+  <parent>pci_0000_06_00_0</parent>
01947c
+  <driver>
01947c
+    <name>vfio_mdev</name>
01947c
+  </driver>
01947c
+ <capability type='mdev'>
01947c
+    <type id='nvidia-11'/>
01947c
+    <iommuGroup number='12'/>
01947c
+    <uuid>35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c</uuid>
01947c
+  </capability>
01947c
+</device>
01947c
+
01947c
 </node>
01947c
diff --git a/tests/test_nodedev.py b/tests/test_nodedev.py
01947c
index 79678bc8..41435262 100644
01947c
--- a/tests/test_nodedev.py
01947c
+++ b/tests/test_nodedev.py
01947c
@@ -8,6 +8,7 @@
01947c
 import os.path
01947c
 
01947c
 import pytest
01947c
+import libvirt
01947c
 
01947c
 from virtinst import Guest
01947c
 from virtinst import NodeDevice
01947c
@@ -154,6 +155,19 @@ def testPCIMdev():
01947c
     assert dev.parent == "pci_0000_06_00_0"
01947c
     assert dev.device_type == "mdev"
01947c
     assert dev.type_id == "nvidia-11"
01947c
+    assert dev.get_mdev_uuid() == "4b20d080-1b54-4048-85b3-a6a62d165c01"
01947c
+
01947c
+# libvirt <7.3.0 doesn't support <uuid> in the mdev node device xml
01947c
+@pytest.mark.skipif(libvirt.getVersion() < 7003000, reason="libvirt version doesn't support new mdev format")
01947c
+def testPCIMdevNewFormat():
01947c
+    conn = utils.URIs.open_testdriver_cached()
01947c
+    devname = "mdev_35ceae7f_eea5_4f28_b7f3_7b12a3e62d3c_0000_06_00_0"
01947c
+    dev = _nodeDevFromName(conn, devname)
01947c
+    assert dev.name == devname
01947c
+    assert dev.parent == "pci_0000_06_00_0"
01947c
+    assert dev.device_type == "mdev"
01947c
+    assert dev.type_id == "nvidia-11"
01947c
+    assert dev.get_mdev_uuid() == "35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c"
01947c
 
01947c
 
01947c
 # NodeDevice 2 Device XML tests
01947c
diff --git a/virtinst/nodedev.py b/virtinst/nodedev.py
01947c
index f54a311c..248723b9 100644
01947c
--- a/virtinst/nodedev.py
01947c
+++ b/virtinst/nodedev.py
01947c
@@ -94,6 +94,12 @@ class NodeDevice(XMLBuilder):
01947c
     device_type = XMLProperty("./capability/@type")
01947c
 
01947c
     def get_mdev_uuid(self):
01947c
+        # libvirt 7.3.0 added a <uuid> element to the nodedev xml for mdev
01947c
+        # types. For older versions, we unfortunately have to parse the nodedev
01947c
+        # name, which uses the format "mdev_$UUID_WITH_UNDERSCORES"
01947c
+        if self.uuid is not None:
01947c
+            return self.uuid
01947c
+
01947c
         return self.name[5:].replace('_', '-')
01947c
 
01947c
     def compare_to_hostdev(self, hostdev):
01947c
@@ -191,6 +197,7 @@ class NodeDevice(XMLBuilder):
01947c
 
01947c
     # type='mdev' options
01947c
     type_id = XMLProperty("./capability/type/@id")
01947c
+    uuid = XMLProperty("./capability/uuid")
01947c
 
01947c
 
01947c
 def _AddressStringToHostdev(conn, addrstr):
01947c
-- 
01947c
2.31.1
01947c