mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemuBuildHostdevSCSICommandLine: Generate via JSON
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>
This commit is contained in:
parent
03ed14d2d4
commit
82d499c6c0
@ -5079,44 +5079,29 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDef *dev)
|
|||||||
return virBufferContentAndReset(&buf);
|
return virBufferContentAndReset(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
virJSONValue *
|
||||||
qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
|
qemuBuildSCSIHostdevDevProps(const virDomainDef *def,
|
||||||
virDomainHostdevDef *dev,
|
virDomainHostdevDef *dev,
|
||||||
const char *backendAlias)
|
const char *backendAlias)
|
||||||
{
|
{
|
||||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
g_autoptr(virJSONValue) props = NULL;
|
||||||
int model = -1;
|
|
||||||
const char *contAlias;
|
|
||||||
|
|
||||||
model = qemuDomainFindSCSIControllerModel(def, dev->info);
|
if (virJSONValueObjectCreate(&props,
|
||||||
if (model < 0)
|
"s:driver", "scsi-generic",
|
||||||
|
NULL) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
virBufferAddLit(&buf, "scsi-generic");
|
if (qemuBuildDeviceAddressProps(props, def, dev->info) < 0)
|
||||||
|
|
||||||
if (!(contAlias = virDomainControllerAliasFind(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
|
|
||||||
dev->info->addr.drive.controller)))
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) {
|
if (virJSONValueObjectAdd(props,
|
||||||
virBufferAsprintf(&buf, ",bus=%s.%d,scsi-id=%d",
|
"s:drive", backendAlias,
|
||||||
contAlias,
|
"s:id", dev->info->alias,
|
||||||
dev->info->addr.drive.bus,
|
"p:bootindex", dev->info->bootIndex,
|
||||||
dev->info->addr.drive.unit);
|
NULL) < 0)
|
||||||
} else {
|
return NULL;
|
||||||
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);
|
return g_steal_pointer(&props);
|
||||||
|
|
||||||
if (dev->info->bootIndex)
|
|
||||||
virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex);
|
|
||||||
|
|
||||||
return virBufferContentAndReset(&buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -5604,7 +5589,7 @@ qemuBuildHostdevSCSICommandLine(virCommand *cmd,
|
|||||||
virQEMUCaps *qemuCaps)
|
virQEMUCaps *qemuCaps)
|
||||||
{
|
{
|
||||||
g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
|
g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
|
||||||
g_autofree char *devstr = NULL;
|
g_autoptr(virJSONValue) devprops = NULL;
|
||||||
const char *backendAlias = NULL;
|
const char *backendAlias = NULL;
|
||||||
|
|
||||||
if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendAlias, qemuCaps)))
|
if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendAlias, qemuCaps)))
|
||||||
@ -5613,10 +5598,11 @@ qemuBuildHostdevSCSICommandLine(virCommand *cmd,
|
|||||||
if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, data, qemuCaps) < 0)
|
if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, data, qemuCaps) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
virCommandAddArg(cmd, "-device");
|
if (!(devprops = qemuBuildSCSIHostdevDevProps(def, hostdev, backendAlias)))
|
||||||
if (!(devstr = qemuBuildSCSIHostdevDevStr(def, hostdev, backendAlias)))
|
return -1;
|
||||||
|
|
||||||
|
if (qemuBuildDeviceCommandlineFromJSON(cmd, devprops, qemuCaps) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
virCommandAddArg(cmd, devstr);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,8 @@ qemuBuildUSBHostdevDevProps(const virDomainDef *def,
|
|||||||
virDomainHostdevDef *dev,
|
virDomainHostdevDef *dev,
|
||||||
virQEMUCaps *qemuCaps);
|
virQEMUCaps *qemuCaps);
|
||||||
|
|
||||||
char *qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
|
virJSONValue *
|
||||||
|
qemuBuildSCSIHostdevDevProps(const virDomainDef *def,
|
||||||
virDomainHostdevDef *dev,
|
virDomainHostdevDef *dev,
|
||||||
const char *backendAlias);
|
const char *backendAlias);
|
||||||
|
|
||||||
|
@ -2639,7 +2639,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
|
|||||||
virErrorPtr orig_err;
|
virErrorPtr orig_err;
|
||||||
g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
|
g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
|
||||||
const char *backendalias = NULL;
|
const char *backendalias = NULL;
|
||||||
g_autofree char *devstr = NULL;
|
g_autoptr(virJSONValue) devprops = NULL;
|
||||||
bool teardowncgroup = false;
|
bool teardowncgroup = false;
|
||||||
bool teardownlabel = false;
|
bool teardownlabel = false;
|
||||||
bool teardowndevice = false;
|
bool teardowndevice = false;
|
||||||
@ -2683,7 +2683,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
|
|||||||
priv->qemuCaps)))
|
priv->qemuCaps)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(devstr = qemuBuildSCSIHostdevDevStr(vm->def, hostdev, backendalias)))
|
if (!(devprops = qemuBuildSCSIHostdevDevProps(vm->def, hostdev, backendalias)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1);
|
VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1);
|
||||||
@ -2693,7 +2693,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriver *driver,
|
|||||||
if (qemuBlockStorageSourceAttachApply(priv->mon, data) < 0)
|
if (qemuBlockStorageSourceAttachApply(priv->mon, data) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
|
|
||||||
if (qemuMonitorAddDevice(priv->mon, devstr) < 0)
|
if (qemuMonitorAddDeviceProps(priv->mon, &devprops) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
|
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user