[PATCH] qemu_domain_address: fix CCW virtio-mem hotplug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Since commit f23f8ff91a virtio-mem supports also CCW. When hotplugging a
virtio-mem device with a CCW address results in a PCI device getting
attached. The method qemuDomainAssignMemoryDeviceSlot is only
considering PCI as address type and overwriting the CCW address. Adding
support for address type CCW.

Signed-off-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx>
---
 src/qemu/qemu_domain_address.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index d38983bf63..b0289c2337 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -3067,6 +3067,7 @@ qemuDomainAssignMemoryDeviceSlot(virDomainObj *vm,
                                  virDomainMemoryDef *mem)
 {
     g_autoptr(virBitmap) slotmap = NULL;
+    virDomainCCWAddressSet *ccwaddrs = NULL;
     virDomainDeviceDef dev = {.type = VIR_DOMAIN_DEVICE_MEMORY, .data.memory = mem};
 
     switch (mem->model) {
@@ -3080,7 +3081,20 @@ qemuDomainAssignMemoryDeviceSlot(virDomainObj *vm,
 
     case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM:
     case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM:
-        return qemuDomainEnsurePCIAddress(vm, &dev);
+        if (mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
+            if (qemuDomainIsS390CCW(vm->def))
+                mem->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW;
+        }
+
+        if (mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE ||
+            mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+            return qemuDomainEnsurePCIAddress(vm, &dev);
+        } else if (mem->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
+            if (!(ccwaddrs = virDomainCCWAddressSetCreateFromDomain(vm->def)))
+                return -1;
+            return virDomainCCWAddressAssign(&mem->info, ccwaddrs,
+                                             !mem->info.addr.ccw.assigned);
+        }
         break;
 
     case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC:
-- 
2.47.0



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux