Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package virt-manager for openSUSE:Factory 
checked in at 2026-02-19 14:19:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/virt-manager (Old)
 and      /work/SRC/openSUSE:Factory/.virt-manager.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "virt-manager"

Thu Feb 19 14:19:26 2026 rev:286 rq:1333633 version:5.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes        
2026-02-06 21:29:57.025216830 +0100
+++ /work/SRC/openSUSE:Factory/.virt-manager.new.1977/virt-manager.changes      
2026-02-19 14:19:34.589284928 +0100
@@ -1,0 +2,19 @@
+Tue Feb 17 11:37:25 MST 2026 - [email protected]
+
+- jsc#PED-14636 - UEFI as default for new SLES 16 VMs
+  virtinst-query-recommended-firmware.patch
+
+-------------------------------------------------------------------
+Wed Feb  4 14:51:19 MST 2026 - [email protected]
+
+- Upstream features and bug fixes (bsc#1027942) (jsc#PED-14625)
+  051-addhardware-Add-usb-as-a-recommended-sound-device.patch
+  055-virtinst-Add-serial-controller-option-to-cli.patch
+  056-virtinst-Add-NVMe-Controller.patch
+  057-virtinst-implement-NVMe-disk-target-generation.patch
+  058-virtManager-Add-NVMe-disk-type.patch
+  059-ui-Show-NVMe-Controller-details.patch
+  060-virtinst-fix-locale-when-running-in-flatpak.patch
+  061-virtinst-add-support-for-iommufd.patch
+
+-------------------------------------------------------------------

New:
----
  051-addhardware-Add-usb-as-a-recommended-sound-device.patch
  055-virtinst-Add-serial-controller-option-to-cli.patch
  056-virtinst-Add-NVMe-Controller.patch
  057-virtinst-implement-NVMe-disk-target-generation.patch
  058-virtManager-Add-NVMe-disk-type.patch
  059-ui-Show-NVMe-Controller-details.patch
  060-virtinst-fix-locale-when-running-in-flatpak.patch
  061-virtinst-add-support-for-iommufd.patch
  virtinst-query-recommended-firmware.patch

----------(New B)----------
  New:- Upstream features and bug fixes (bsc#1027942) (jsc#PED-14625)
  051-addhardware-Add-usb-as-a-recommended-sound-device.patch
  055-virtinst-Add-serial-controller-option-to-cli.patch
  New:  051-addhardware-Add-usb-as-a-recommended-sound-device.patch
  055-virtinst-Add-serial-controller-option-to-cli.patch
  056-virtinst-Add-NVMe-Controller.patch
  New:  055-virtinst-Add-serial-controller-option-to-cli.patch
  056-virtinst-Add-NVMe-Controller.patch
  057-virtinst-implement-NVMe-disk-target-generation.patch
  New:  056-virtinst-Add-NVMe-Controller.patch
  057-virtinst-implement-NVMe-disk-target-generation.patch
  058-virtManager-Add-NVMe-disk-type.patch
  New:  057-virtinst-implement-NVMe-disk-target-generation.patch
  058-virtManager-Add-NVMe-disk-type.patch
  059-ui-Show-NVMe-Controller-details.patch
  New:  058-virtManager-Add-NVMe-disk-type.patch
  059-ui-Show-NVMe-Controller-details.patch
  060-virtinst-fix-locale-when-running-in-flatpak.patch
  New:  059-ui-Show-NVMe-Controller-details.patch
  060-virtinst-fix-locale-when-running-in-flatpak.patch
  061-virtinst-add-support-for-iommufd.patch
  New:  060-virtinst-fix-locale-when-running-in-flatpak.patch
  061-virtinst-add-support-for-iommufd.patch
  New:- jsc#PED-14636 - UEFI as default for new SLES 16 VMs
  virtinst-query-recommended-firmware.patch
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ virt-manager.spec ++++++
--- /var/tmp/diff_new_pack.rUQTvC/_old  2026-02-19 14:19:36.609367820 +0100
+++ /var/tmp/diff_new_pack.rUQTvC/_new  2026-02-19 14:19:36.609367820 +0100
@@ -61,6 +61,14 @@
 Patch10:        
020-virtinst-remove-legacy-attribute-from-set_boot_order-get_boot_order.patch
 Patch11:        021-installer-add-support-to-use-device-boot-order.patch
 Patch12:        024-virtinst-Fix-XDG_DATA_HOME-handling.patch
+Patch13:        051-addhardware-Add-usb-as-a-recommended-sound-device.patch
+Patch14:        055-virtinst-Add-serial-controller-option-to-cli.patch
+Patch15:        056-virtinst-Add-NVMe-Controller.patch
+Patch16:        057-virtinst-implement-NVMe-disk-target-generation.patch
+Patch17:        058-virtManager-Add-NVMe-disk-type.patch
+Patch18:        059-ui-Show-NVMe-Controller-details.patch
+Patch19:        060-virtinst-fix-locale-when-running-in-flatpak.patch
+Patch20:        061-virtinst-add-support-for-iommufd.patch
 # SUSE Only
 Patch150:       virtman-desktop.patch
 Patch151:       virtman-kvm.patch
@@ -82,6 +90,7 @@
 Patch225:       virtinst-add-caasp-support.patch
 Patch226:       virtinst-add-sle15-detection-support.patch
 Patch227:       virtinst-media-detection.patch
+Patch228:       virtinst-query-recommended-firmware.patch
 # Bug Fixes
 Patch251:       virtman-increase-setKeepAlive-count.patch
 Patch252:       virtman-allow-destroy-from-shutdown-menu-of-crashed-vm.patch

++++++ 051-addhardware-Add-usb-as-a-recommended-sound-device.patch ++++++
Subject: addhardware: Add usb as a recommended sound device
From: Akihiko Odaki [email protected] Wed Aug 6 15:04:55 2025 +0900
Date: Sat Jan 10 19:25:58 2026 +0100:
Git: 10014e1505ac20569df8f92078073f9aa5f621f4

usb is an architecture-independent sound device and useful for
Windows on Arm, which does not support PC sound devices.

Signed-off-by: Akihiko Odaki <[email protected]>

diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 7ce8db23c..e4db35d5b 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -562,7 +562,7 @@ class vmmAddHardware(vmmGObjectUI):
 
     @staticmethod
     def sound_recommended_models(_guest):
-        return ["ich6", "ich9", "ac97"]
+        return ["ich6", "ich9", "ac97", "usb"]
 
     @staticmethod
     def sound_pretty_model(model):

++++++ 055-virtinst-Add-serial-controller-option-to-cli.patch ++++++
Subject: virtinst: Add serial controller option to cli
From: 6543 [email protected] Thu Jan 8 21:43:38 2026 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 6f1adcc9251429e1dc9f15ec68e3b00affdb9638


diff --git a/tests/data/cli/compare/virt-install-many-devices.xml 
b/tests/data/cli/compare/virt-install-many-devices.xml
index ddfbbe058..fd972ef32 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -507,6 +507,9 @@
     <controller type="usb" model="ich9-uhci3">
       <master startport="4"/>
     </controller>
+    <controller type="nvme">
+      <serial>1</serial>
+    </controller>
     <filesystem type="mount" accessmode="mapped">
       <driver ats="on" iommu="off" packed="on" page_per_vq="off"/>
       <alias name="testfsalias"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 99f4a59dc..b0b236615 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -709,6 +709,7 @@ 
source.reservations.managed=no,source.reservations.source.type=unix,source.reser
 --controller usb3
 --controller scsi,model=virtio-scsi
 --controller usb2
+--controller nvme,serial=1
 
 
 --input type=keyboard,bus=usb
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 346043287..1081cf115 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4495,6 +4495,7 @@ class ParserController(VirtCLIParser):
         cls.add_arg("target.memReserve", "target_memReserve")
         cls.add_arg("pcihole64", "pcihole64")
         cls.add_arg("pcihole64.unit", "pcihole64_unit")
+        cls.add_arg("serial", "serial")
 
         cls.add_arg("address", None, lookup_cb=None, cb=cls.set_address_cb)
         cls.add_arg("num_pcie_root_ports", None, lookup_cb=None, 
cb=cls.noset_cb)
diff --git a/virtinst/devices/controller.py b/virtinst/devices/controller.py
index f3c4ce61d..def85f10e 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -77,6 +77,7 @@ class DeviceController(Device):
     ports = XMLProperty("./@ports", is_int=True)
     maxGrantFrames = XMLProperty("./@maxGrantFrames", is_int=True)
     index = XMLProperty("./@index", is_int=True)
+    serial = XMLProperty("./serial")
 
     driver_iothread = XMLProperty("./driver/@iothread", is_int=True)
     driver_queues = XMLProperty("./driver/@queues", is_int=True)

++++++ 056-virtinst-Add-NVMe-Controller.patch ++++++
Subject: virtinst: Add NVMe Controller
From: 6543 [email protected] Thu Dec 18 03:37:40 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 605b3d807078f8a67f6828ed84d4e0c2aa6d63bc


diff --git a/virtinst/devices/controller.py b/virtinst/devices/controller.py
index def85f10e..ff723d91c 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -14,6 +14,7 @@ class DeviceController(Device):
     TYPE_IDE = "ide"
     TYPE_FDC = "fdc"
     TYPE_SCSI = "scsi"
+    TYPE_NVME = "nvme"
     TYPE_SATA = "sata"
     TYPE_VIRTIOSERIAL = "virtio-serial"
     TYPE_USB = "usb"
@@ -121,6 +122,6 @@ class DeviceController(Device):
         ret = []
         if self.type == "virtio-serial":
             ret = self._get_attached_virtioserial_devices(guest)
-        elif self.type in ["scsi", "sata", "ide", "fdc"]:
+        elif self.type in ["scsi", "sata", "ide", "fdc", "nvme"]:
             ret = self._get_attached_disk_devices(guest)
         return ret

++++++ 057-virtinst-implement-NVMe-disk-target-generation.patch ++++++
Subject: virtinst: implement NVMe disk target generation
From: Pavel Hrdina [email protected] Fri Jan 9 08:51:29 2026 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 97505a9feab1ecfd23d88dad0f90444108496f83

In libvirt NVMe disk targets are based on what linux uses for device
names.

Signed-off-by: Pavel Hrdina <[email protected]>

--- a/tests/test_disk.py
+++ b/tests/test_disk.py
@@ -40,13 +40,30 @@ def test_disk_numtotarget():
     assert DeviceDisk.target_to_num("xvdaaa") == 26 * 26 * 1 + 26 * 1 + 0
 
     conn = utils.URIs.open_testdefault_cached()
+    guest = virtinst.Guest(conn)
     disk = virtinst.DeviceDisk(conn)
     disk.bus = "ide"
 
-    assert disk.generate_target([]) == "hda"
-    assert disk.generate_target(["hda"]) == "hdb"
-    assert disk.generate_target(["hdb", "sda"]) == "hdc"
-    assert disk.generate_target(["hda", "hdd"]) == "hdb"
+    assert disk.generate_target([], guest) == "hda"
+    assert disk.generate_target(["hda"], guest) == "hdb"
+    assert disk.generate_target(["hdb", "sda"], guest) == "hdc"
+    assert disk.generate_target(["hda", "hdd"], guest) == "hdb"
+
+    disk.bus = "nvme"
+    disk.serial = "0"
+
+    assert disk.generate_target([], guest) == "nvme0n1"
+
+    controller = virtinst.DeviceController(conn)
+    controller.type = "nvme"
+    controller.serial = "0"
+    controller.index = 0
+    guest.add_device(controller)
+
+    assert disk.generate_target([], guest) == "nvme0n1"
+
+    controller.index = 1
+    assert disk.generate_target(["nvme1n1"], guest) == "nvme1n2"
 
 
 def test_disk_dir_searchable(monkeypatch):
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -1453,7 +1453,7 @@ class vmmAddHardware(vmmGObjectUI):
                 used.append(d.target)
 
         self._set_disk_controller(disk)
-        disk.generate_target(used)
+        disk.generate_target(used, self.vm.xmlobj)
         return disk
 
     def _build_network(self):
--- a/virtinst/devices/disk.py
+++ b/virtinst/devices/disk.py
@@ -914,6 +914,19 @@ class DeviceDisk(Device):
         if path:
             self._set_xmlpath(path)
 
+    def get_nvme_namespace(self, guest):
+        """
+        Returns the NVMe namespace for disk based on it's bus and serial.
+
+        If no NVMe controller is defined return 0 as that is default used by
+        libvirt and virt-manager.
+        """
+        for c in guest.devices.controller:
+            if c.type == "nvme" and c.serial == self.serial:
+                return c.index
+
+        return 0
+
     def get_target_prefix(self):
         """
         Returns the suggested disk target prefix (hd, xvd, sd ...) for the
@@ -930,6 +943,7 @@ class DeviceDisk(Device):
                 "fd": 2,
                 "hd": 4,
                 "sd": 1024,
+                "nvme": 1024,
             }
             return prefix, nummap[prefix]
 
@@ -941,10 +955,12 @@ class DeviceDisk(Device):
             return _return("fd")
         elif self.bus == "ide":
             return _return("hd")
+        elif self.bus == "nvme":
+            return _return("nvme")
         # sata, scsi, usb, sd
         return _return("sd")
 
-    def generate_target(self, skip_targets):
+    def generate_target(self, skip_targets, guest):
         """
         Generate target device ('hda', 'sdb', etc..) for disk, excluding
         any targets in 'skip_targets'.
@@ -957,11 +973,17 @@ class DeviceDisk(Device):
         skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
         skip_targets.sort()
 
+        if self.bus == "nvme":
+            nvmen = self.get_nvme_namespace(guest)
+
         def get_target():
             first_found = None
 
             for i in range(maxnode):
-                gen_t = prefix + self.num_to_target(i + 1)
+                if self.bus == "nvme":
+                    gen_t = f"{prefix}{nvmen}n{i + 1}"
+                else:
+                    gen_t = prefix + self.num_to_target(i + 1)
                 if gen_t in skip_targets:
                     skip_targets.remove(gen_t)
                     continue
@@ -1008,7 +1030,7 @@ class DeviceDisk(Device):
             used.remove(self.target)
 
         self.target = None
-        self.generate_target(used)
+        self.generate_target(used, guest)
 
     #########################
     # set_defaults handling #
@@ -1078,4 +1100,4 @@ class DeviceDisk(Device):
 
         if not self.target:
             used_targets = [d.target for d in guest.devices.disk if d.target]
-            self.generate_target(used_targets)
+            self.generate_target(used_targets, guest)
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -877,7 +877,7 @@ class Guest(XMLBuilder):
             if dev.DEVICE_TYPE == "disk" and dev.bus == "ide":
                 dev.bus = "sata"
                 used_targets = [d.target for d in self.devices.disk if 
d.target]
-                dev.generate_target(used_targets)
+                dev.generate_target(used_targets, self)
                 dev.address.clear()
 
             if dev.address.type == "pci":

++++++ 058-virtManager-Add-NVMe-disk-type.patch ++++++
Subject: virtManager: Add NVMe disk type
From: 6543 [email protected] Thu Dec 18 03:38:56 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 08b547366fbc4037a737515ee0efab3c3e673a80


--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -472,6 +472,7 @@ class vmmAddHardware(vmmGObjectUI):
     def controller_recommended_types():
         return [
             DeviceController.TYPE_SCSI,
+            DeviceController.TYPE_NVME,
             DeviceController.TYPE_USB,
             DeviceController.TYPE_VIRTIOSERIAL,
             DeviceController.TYPE_CCID,
@@ -482,6 +483,7 @@ class vmmAddHardware(vmmGObjectUI):
         labels = {
             DeviceController.TYPE_IDE: _("IDE"),
             DeviceController.TYPE_FDC: _("Floppy"),
+            DeviceController.TYPE_NVME: _("NVMe"),
             DeviceController.TYPE_SCSI: _("SCSI"),
             DeviceController.TYPE_SATA: _("SATA"),
             DeviceController.TYPE_VIRTIOSERIAL: _("VirtIO Serial"),
@@ -510,6 +512,7 @@ class vmmAddHardware(vmmGObjectUI):
                 ret.append("ide")
             ret.append("sata")
             ret.append("fdc")
+            ret.append("nvme")
             ret.append("scsi")
             ret.append("usb")
 
@@ -531,7 +534,7 @@ class vmmAddHardware(vmmGObjectUI):
             buses = vmmAddHardware.disk_old_recommended_buses(guest)
 
         bus_map = {
-            "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"],
+            "disk": ["ide", "nvme", "sata", "scsi", "sd", "usb", "virtio", 
"xen"],
             "floppy": ["fdc"],
             "cdrom": ["ide", "sata", "scsi", "usb"],
             "lun": ["scsi"],
@@ -542,6 +545,7 @@ class vmmAddHardware(vmmGObjectUI):
     def disk_pretty_bus(bus):
         bus_mappings = {
             "ide": _("IDE"),
+            "nvme": _("NVMe"),
             "sata": _("SATA"),
             "scsi": _("SCSI"),
             "sd": _("SD"),
@@ -1424,16 +1428,33 @@ class vmmAddHardware(vmmGObjectUI):
         return dev
 
     def _set_disk_controller(self, disk):
-        # Add a SCSI controller with model virtio-scsi if needed
+        # Add a SCSI controller with model virtio-scsi if needed or
+        # add an NVMe controller if needed
         disk.vmm_controller = None
-        if not self.vm.xmlobj.can_default_virtioscsi():
-            return
 
-        controller = DeviceController(self.conn.get_backend())
-        controller.type = "scsi"
-        controller.model = "virtio-scsi"
-        controller.index = 0
-        disk.vmm_controller = controller
+        if disk.bus == "scsi":
+            if not self.vm.xmlobj.can_default_virtioscsi():
+                return
+
+            controller = DeviceController(self.conn.get_backend())
+            controller.type = "scsi"
+            controller.model = "virtio-scsi"
+            controller.index = 0
+            disk.vmm_controller = controller
+
+        elif disk.bus == "nvme":
+            nvme_controllers = [c for c in self.vm.xmlobj.devices.controller 
if c.type == "nvme"]
+            if len(nvme_controllers) > 0:
+                if not disk.serial:
+                    disk.serial = nvme_controllers[0].serial
+            else:
+                if not disk.serial:
+                    disk.serial = "0"
+                controller = DeviceController(self.conn.get_backend())
+                controller.type = "nvme"
+                controller.index = 0
+                controller.serial = disk.serial
+                disk.vmm_controller = controller
 
     def _build_storage(self):
         bus = uiutil.get_list_selection(self.widget("storage-bustype"))
@@ -1585,12 +1606,18 @@ class vmmAddHardware(vmmGObjectUI):
         controller_num = [x for x in controllers if (x.type == 
controller_type)]
         if len(controller_num) > 0:
             index_new = max(int(x.index or 0) for x in controller_num) + 1
-            dev.index = index_new
+        else:
+            index_new = 0
+        dev.index = index_new
 
         dev.type = controller_type
 
         if model and model != "none":
             dev.model = model
+
+        if controller_type == DeviceController.TYPE_NVME:
+            dev.serial = str(dev.index)
+
         return dev
 
     def _build_rng(self):

++++++ 059-ui-Show-NVMe-Controller-details.patch ++++++
Subject: ui: Show NVMe Controller details
From: 6543 [email protected] Thu Dec 18 03:40:08 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 90e425b59a30f1dd4827de5cc480031d89391d3d

display serial and atached disks

diff --git a/ui/details.ui b/ui/details.ui
index ead89a8c0..2eb0d8a44 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -4243,6 +4243,31 @@
                                         <property 
name="top-attach">1</property>
                                       </packing>
                                     </child>
+                                    <child>
+                                      <object class="GtkLabel" 
id="controller-serial-label">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property name="halign">end</property>
+                                        <property name="label" 
translatable="yes">Serial:</property>
+                                      </object>
+                                      <packing>
+                                        <property 
name="left-attach">0</property>
+                                        <property 
name="top-attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" 
id="controller-serial">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property 
name="halign">start</property>
+                                        <property name="label">-</property>
+                                        <property 
name="selectable">True</property>
+                                      </object>
+                                      <packing>
+                                        <property 
name="left-attach">1</property>
+                                        <property 
name="top-attach">2</property>
+                                      </packing>
+                                    </child>
                                     <child>
                                       <object class="GtkLabel" 
id="device-list-label">
                                         <property 
name="visible">True</property>
@@ -4255,7 +4280,7 @@
                                       </object>
                                       <packing>
                                         <property 
name="left-attach">0</property>
-                                        <property 
name="top-attach">2</property>
+                                        <property 
name="top-attach">3</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -4290,7 +4315,7 @@
                                       </object>
                                       <packing>
                                         <property 
name="left-attach">1</property>
-                                        <property 
name="top-attach">2</property>
+                                        <property 
name="top-attach">3</property>
                                       </packing>
                                     </child>
                                   </object>
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 6cadf8bf0..c927f1045 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -2161,7 +2161,7 @@ class vmmDetails(vmmGObjectUI):
             self._disable_device_remove(_("Hypervisor does not support 
removing this device"))
         if controller.type == "pci":
             self._disable_device_remove(_("Hypervisor does not support 
removing this device"))
-        elif controller.type in ["scsi", "sata", "ide", "fdc"]:
+        elif controller.type in ["nvme", "scsi", "sata", "ide", "fdc"]:
             model = self.widget("controller-device-list").get_model()
             model.clear()
             disks = controller.get_attached_devices(self.vm.xmlobj)
@@ -2188,6 +2188,12 @@ class vmmDetails(vmmGObjectUI):
         type_label = vmmAddHardware.controller_pretty_desc(controller)
         self.widget("controller-type").set_text(type_label)
 
+        has_serial = controller.type == "nvme" and controller.serial
+        if has_serial:
+            self.widget("controller-serial").set_text(controller.serial)
+        uiutil.set_grid_row_visible(self.widget("controller-serial"), 
has_serial)
+        uiutil.set_grid_row_visible(self.widget("controller-serial-label"), 
has_serial)
+
         combo = self.widget("controller-model")
         vmmAddHardware.populate_controller_model_combo(combo, controller.type)
         show_model = controller.model or len(combo.get_model()) > 1

++++++ 060-virtinst-fix-locale-when-running-in-flatpak.patch ++++++
Subject: virtinst: fix locale when running in flatpak
From: Pavel Hrdina [email protected] Sun Jan 11 20:48:22 2026 +0100
Date: Sun Jan 11 21:20:42 2026 +0100:
Git: d13271422e47d9bc827d6ede3e7d5154568115c7

Module locale is used to configure C libraries. When running in flatpak
we need to set correct path using locale module as well.

Resolves: https://github.com/virt-manager/virt-manager/issues/1023
Signed-off-by: Pavel Hrdina <[email protected]>

diff --git a/virtinst/__init__.py b/virtinst/__init__.py
index 621acb238..eb874063a 100644
--- a/virtinst/__init__.py
+++ b/virtinst/__init__.py
@@ -24,6 +24,7 @@ def _setup_i18n():
 
     gettext.install("virt-manager", BuildConfig.gettext_dir, 
names=["ngettext"])
     gettext.bindtextdomain("virt-manager", BuildConfig.gettext_dir)
+    locale.bindtextdomain("virt-manager", BuildConfig.gettext_dir)
 
 
 def _set_libvirt_error_handler():

++++++ 061-virtinst-add-support-for-iommufd.patch ++++++
Subject: virtinst: add support for iommufd
From: Nathan Chen [email protected] Mon Oct 27 18:34:27 2025 +0000
Date: Tue Feb 3 07:17:03 2026 +0100:
Git: 9ab2918face14ff4081b85bfd224342e1829880c

A minimal config to enable iommufd would be

 $ virt-install
     ...args...
     --host-device 0x062a:0x0001,driver.iommufd=yes

Signed-off-by: Nathan Chen <[email protected]>

diff --git a/tests/data/cli/compare/virt-install-many-devices.xml 
b/tests/data/cli/compare/virt-install-many-devices.xml
index fd972ef32..5e4aec35e 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -928,6 +928,12 @@
         <zpci uid="0xffff" fid="0xffffffff"/>
       </address>
     </hostdev>
+    <hostdev mode="subsystem" type="pci" managed="yes">
+      <source>
+        <address domain="0" bus="21" slot="0" function="4"/>
+      </source>
+      <driver name="vfio" iommufd="yes"/>
+    </hostdev>
     <hostdev mode="subsystem" type="usb" managed="yes">
       <source>
         <vendor id="0x062a"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index b0b236615..8d1c24fe6 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -748,6 +748,7 @@ 
source.reservations.managed=no,source.reservations.source.type=unix,source.reser
 --hostdev 15:0.1
 --host-device 2:15:0.2
 --hostdev 
0:15:0.3,address.type=pci,address.zpci.uid=0xffff,address.zpci.fid=0xffffffff
+--hostdev 0:15:0.4,driver_name=vfio,driver.iommufd=yes
 --host-device 0x062a:0x0001,driver_name=vfio
 --host-device 0483:2016
 --host-device 
pci_8086_2829_scsi_host_scsi_device_lun0,rom.bar=on,acpi.nodeset=0-2
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 1081cf115..c6001644c 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -5287,6 +5287,7 @@ class ParserHostdev(VirtCLIParser):
         cls.add_arg("type", "type")
         cls.add_arg("name", None, cb=cls.set_name_cb, 
lookup_cb=cls.name_lookup_cb)
         cls.add_arg("driver.name", "driver_name")
+        cls.add_arg("driver.iommufd", "driver_iommufd")
         cls.add_arg("rom.bar", "rom_bar", is_onoff=True)
         cls.add_arg("acpi.nodeset", "acpi_nodeset", can_comma=True)
         cls.add_arg("source.startupPolicy", "startup_policy")
diff --git a/virtinst/devices/hostdev.py b/virtinst/devices/hostdev.py
index 43d5322f3..2a3dc048d 100644
--- a/virtinst/devices/hostdev.py
+++ b/virtinst/devices/hostdev.py
@@ -127,6 +127,7 @@ class DeviceHostdev(Device):
     slot = XMLProperty("./source/address/@slot")
 
     driver_name = XMLProperty("./driver/@name")
+    driver_iommufd = XMLProperty("./driver/@iommufd", is_yesno=True)
     rom_bar = XMLProperty("./rom/@bar", is_onoff=True)
     acpi_nodeset = XMLProperty("./acpi/@nodeset")
 

++++++ virtinst-query-recommended-firmware.patch ++++++
References: jsc#PED-14636 - Impl: UEFI as default for new VMs
This patch depends on an upstream libosinfo patch.

Index: virt-manager-5.1.0/virtinst/osdict.py
===================================================================
--- virt-manager-5.1.0.orig/virtinst/osdict.py
+++ virt-manager-5.1.0/virtinst/osdict.py
@@ -445,21 +445,27 @@ class _OsVariant:
 
     def _supports_firmware_type(self, name, arch, default):
         firmwares = self._get_firmware_list()
+        is_supported = default
+        is_recommended = False
 
         for firmware in firmwares:  # pragma: no cover
             if firmware.get_architecture() != arch:
                 continue
             if firmware.get_firmware_type() == name:
-                return firmware.is_supported()
+                is_supported = firmware.is_supported()
+                if hasattr(firmware, "is_recommended"):
+                    is_recommended = firmware.is_recommended()
 
-        return default
+        return (is_supported, is_recommended)
 
     def requires_firmware_efi(self, arch):
         ret = False
         try:
-            supports_efi = self._supports_firmware_type("efi", arch, False)
-            supports_bios = self._supports_firmware_type("bios", arch, True)
-            ret = supports_efi and not supports_bios
+            supports_efi, recommended_efi = 
self._supports_firmware_type("efi", arch, False)
+            supports_bios, recommended_bios = 
self._supports_firmware_type("bios", arch, True)
+            if supports_efi:
+                if not supports_bios or recommended_efi:
+                    ret = True
         except Exception:  # pragma: no cover
             log.debug("Error checking osinfo firmware support", exc_info=True)
 

++++++ virtinst-xenbus-disk-index-fix.patch ++++++
--- /var/tmp/diff_new_pack.rUQTvC/_old  2026-02-19 14:19:37.037385384 +0100
+++ /var/tmp/diff_new_pack.rUQTvC/_new  2026-02-19 14:19:37.041385548 +0100
@@ -10,7 +10,7 @@
 ===================================================================
 --- virt-manager-5.1.0.orig/virtinst/devices/disk.py
 +++ virt-manager-5.1.0/virtinst/devices/disk.py
-@@ -961,6 +961,17 @@ class DeviceDisk(Device):
+@@ -977,6 +977,17 @@ class DeviceDisk(Device):
          :returns: generated target
          """
          prefix, maxnode = self.get_target_prefix()
@@ -28,17 +28,17 @@
          skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
          skip_targets.sort()
  
-@@ -968,11 +979,18 @@ class DeviceDisk(Device):
-             first_found = None
- 
-             for i in range(maxnode):
--                gen_t = prefix + self.num_to_target(i + 1)
-+                postfix = self.num_to_target(i + 1)
-+                gen_t = prefix + postfix
-+                if self.conn.is_xen() and postfix in postfix_targets:
-+                    if gen_t in skip_targets:
-+                        skip_targets.remove(gen_t)
-+                    continue
+@@ -990,11 +1001,18 @@ class DeviceDisk(Device):
+                 if self.bus == "nvme":
+                     gen_t = f"{prefix}{nvmen}n{i + 1}"
+                 else:
+-                    gen_t = prefix + self.num_to_target(i + 1)
++                    postfix = self.num_to_target(i + 1)
++                    gen_t = prefix + postfix
++                    if self.conn.is_xen() and postfix in postfix_targets:
++                        if gen_t in skip_targets:
++                            skip_targets.remove(gen_t)
++                        continue
                  if gen_t in skip_targets:
                      skip_targets.remove(gen_t)
                      continue

++++++ virtman-disallow-adding-floppy-disk.patch ++++++
--- /var/tmp/diff_new_pack.rUQTvC/_old  2026-02-19 14:19:37.077387025 +0100
+++ /var/tmp/diff_new_pack.rUQTvC/_new  2026-02-19 14:19:37.081387189 +0100
@@ -8,7 +8,7 @@
 ===================================================================
 --- virt-manager-5.1.0.orig/virtManager/addhardware.py
 +++ virt-manager-5.1.0/virtManager/addhardware.py
-@@ -529,6 +529,9 @@ class vmmAddHardware(vmmGObjectUI):
+@@ -532,6 +532,9 @@ class vmmAddHardware(vmmGObjectUI):
              buses = domcaps.devices.disk.get_enum("bus").get_values()
          else:
              buses = vmmAddHardware.disk_old_recommended_buses(guest)
@@ -17,8 +17,8 @@
 +            buses.append("fdc")
  
          bus_map = {
-             "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"],
-@@ -548,6 +551,7 @@ class vmmAddHardware(vmmGObjectUI):
+             "disk": ["ide", "nvme", "sata", "scsi", "sd", "usb", "virtio", 
"xen"],
+@@ -552,6 +555,7 @@ class vmmAddHardware(vmmGObjectUI):
              "usb": _("USB"),
              "virtio": _("VirtIO"),
              "xen": _("Xen"),
@@ -26,7 +26,7 @@
          }
          return bus_mappings.get(bus, bus)
  
-@@ -703,7 +707,8 @@ class vmmAddHardware(vmmGObjectUI):
+@@ -707,7 +711,8 @@ class vmmAddHardware(vmmGObjectUI):
          target_list.add_attribute(text, "text", 2)
          target_model.append([DeviceDisk.DEVICE_DISK, "drive-harddisk", 
_("Disk device")])
          target_model.append([DeviceDisk.DEVICE_CDROM, "media-optical", 
_("CDROM device")])

Reply via email to