]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuBuildHostdevSCSICommandLine: Generate via JSON
authorPeter Krempa <pkrempa@redhat.com>
Mon, 4 Oct 2021 12:53:33 +0000 (14:53 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 12 Oct 2021 08:26:04 +0000 (10:26 +0200)
Since 'qemuBuildDeviceAddressProps' now also builds 'drive' addresses
the generator is way simpler and doesn't use any special fields.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_command.h
src/qemu/qemu_hotplug.c

index 22d984494547849c225d14e1df685767859baacf..9e40a6b70a5bc794d2be0e45717e60bb569614f2 100644 (file)
@@ -5079,44 +5079,29 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDef *dev)
     return virBufferContentAndReset(&buf);
 }
 
-char *
-qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
-                           virDomainHostdevDef *dev,
-                           const char *backendAlias)
+virJSONValue *
+qemuBuildSCSIHostdevDevProps(const virDomainDef *def,
+                             virDomainHostdevDef *dev,
+                             const char *backendAlias)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-    int model = -1;
-    const char *contAlias;
+    g_autoptr(virJSONValue) props = NULL;
 
-    model = qemuDomainFindSCSIControllerModel(def, dev->info);
-    if (model < 0)
+    if (virJSONValueObjectCreate(&props,
+                                 "s:driver", "scsi-generic",
+                                 NULL) < 0)
         return NULL;
 
-    virBufferAddLit(&buf, "scsi-generic");
-
-    if (!(contAlias = virDomainControllerAliasFind(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
-                                                   dev->info->addr.drive.controller)))
+    if (qemuBuildDeviceAddressProps(props, def, dev->info) < 0)
         return NULL;
 
-    if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) {
-        virBufferAsprintf(&buf, ",bus=%s.%d,scsi-id=%d",
-                          contAlias,
-                          dev->info->addr.drive.bus,
-                          dev->info->addr.drive.unit);
-    } else {
-        virBufferAsprintf(&buf, ",bus=%s.0,channel=%d,scsi-id=%d,lun=%d",
-                          contAlias,
-                          dev->info->addr.drive.bus,
-                          dev->info->addr.drive.target,
-                          dev->info->addr.drive.unit);
-    }
-
-    virBufferAsprintf(&buf, ",drive=%s,id=%s", backendAlias, dev->info->alias);
-
-    if (dev->info->bootIndex)
-        virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex);
+    if (virJSONValueObjectAdd(props,
+                              "s:drive", backendAlias,
+                              "s:id", dev->info->alias,
+                              "p:bootindex", dev->info->bootIndex,
+                              NULL) < 0)
+        return NULL;
 
-    return virBufferContentAndReset(&buf);
+    return g_steal_pointer(&props);
 }
 
 static int
@@ -5604,7 +5589,7 @@ qemuBuildHostdevSCSICommandLine(virCommand *cmd,
                                 virQEMUCaps *qemuCaps)
 {
     g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
-    g_autofree char *devstr = NULL;
+    g_autoptr(virJSONValue) devprops = NULL;
     const char *backendAlias = NULL;
 
     if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendAlias, qemuCaps)))
@@ -5613,10 +5598,11 @@ qemuBuildHostdevSCSICommandLine(virCommand *cmd,
     if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, data, qemuCaps) < 0)
         return -1;
 
-    virCommandAddArg(cmd, "-device");
-    if (!(devstr = qemuBuildSCSIHostdevDevStr(def, hostdev, backendAlias)))
+    if (!(devprops = qemuBuildSCSIHostdevDevProps(def, hostdev, backendAlias)))
+        return -1;
+
+    if (qemuBuildDeviceCommandlineFromJSON(cmd, devprops, qemuCaps) < 0)
         return -1;
-    virCommandAddArg(cmd, devstr);
 
     return 0;
 }
index 8ad87f42779f7b2fede96571ade996c3bc912e67..5b1b727b8423496e0e582240d98c00b2e233feeb 100644 (file)
@@ -182,9 +182,10 @@ qemuBuildUSBHostdevDevProps(const virDomainDef *def,
                             virDomainHostdevDef *dev,
                             virQEMUCaps *qemuCaps);
 
-char *qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
-                                 virDomainHostdevDef *dev,
-                                 const char *backendAlias);
+virJSONValue *
+qemuBuildSCSIHostdevDevProps(const virDomainDef *def,
+                             virDomainHostdevDef *dev,
+                             const char *backendAlias);
 
 qemuBlockStorageSourceAttachData *
 qemuBuildHostdevSCSIAttachPrepare(virDomainHostdevDef *hostdev,
index 67aed2c12869ddb0b77b5529309dee4781aab97a..28cafd11d26f0a23ccaa2e0e6ea2e6502be32d1f 100644 (file)
@@ -2639,7 +2639,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
     virErrorPtr orig_err;
     g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
     const char *backendalias = NULL;
-    g_autofree char *devstr = NULL;
+    g_autoptr(virJSONValue) devprops = NULL;
     bool teardowncgroup = false;
     bool teardownlabel = false;
     bool teardowndevice = false;
@@ -2683,7 +2683,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
                                                    priv->qemuCaps)))
         goto cleanup;
 
-    if (!(devstr = qemuBuildSCSIHostdevDevStr(vm->def, hostdev, backendalias)))
+    if (!(devprops = qemuBuildSCSIHostdevDevProps(vm->def, hostdev, backendalias)))
         goto cleanup;
 
     VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1);
@@ -2693,7 +2693,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
     if (qemuBlockStorageSourceAttachApply(priv->mon, data) < 0)
         goto exit_monitor;
 
-    if (qemuMonitorAddDevice(priv->mon, devstr) < 0)
+    if (qemuMonitorAddDeviceProps(priv->mon, &devprops) < 0)
         goto exit_monitor;
 
     if (qemuDomainObjExitMonitor(driver, vm) < 0)