1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemuBuildPanicCommandLine: Generate via JSON

Format a JSON object with the device properties and then use
qemuBuildDeviceCommandlineFromJSON to convert it to the standard
commandline for now.

The 'ioport' property of 'pvpanic' is a number in QEMU:
  ioport=<uint16>        -  (default: 1285)

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-03-26 10:09:45 +01:00
parent ab92e9decb
commit 8617d29abb

View File

@ -10187,22 +10187,33 @@ qemuBuildVMCoreInfoCommandLine(virCommand *cmd,
static int static int
qemuBuildPanicCommandLine(virCommand *cmd, qemuBuildPanicCommandLine(virCommand *cmd,
const virDomainDef *def) const virDomainDef *def,
virQEMUCaps *qemuCaps)
{ {
size_t i; size_t i;
for (i = 0; i < def->npanics; i++) { for (i = 0; i < def->npanics; i++) {
switch ((virDomainPanicModel) def->panics[i]->model) { switch ((virDomainPanicModel) def->panics[i]->model) {
case VIR_DOMAIN_PANIC_MODEL_ISA: case VIR_DOMAIN_PANIC_MODEL_ISA: {
switch (def->panics[i]->info.type) { g_autoptr(virJSONValue) props = NULL;
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA:
virCommandAddArg(cmd, "-device"); if (virJSONValueObjectCreate(&props,
virCommandAddArgFormat(cmd, "pvpanic,ioport=%d", "s:driver", "pvpanic",
def->panics[i]->info.addr.isa.iobase); NULL) < 0)
break; return -1;
/* pvpanic uses 'ioport' instead of 'iobase' so
* qemuBuildDeviceAddressProps can't be used */
if (def->panics[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA) {
if (virJSONValueObjectAdd(props,
"u:ioport", def->panics[i]->info.addr.isa.iobase,
NULL) < 0)
return -1;
}
if (qemuBuildDeviceCommandlineFromJSON(cmd, props, qemuCaps) < 0)
return -1;
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
virCommandAddArgList(cmd, "-device", "pvpanic", NULL);
break; break;
} }
@ -10870,7 +10881,7 @@ qemuBuildCommandLine(virQEMUDriver *driver,
if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0) if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0)
return NULL; return NULL;
if (qemuBuildPanicCommandLine(cmd, def) < 0) if (qemuBuildPanicCommandLine(cmd, def, qemuCaps) < 0)
return NULL; return NULL;
for (i = 0; i < def->nshmems; i++) { for (i = 0; i < def->nshmems; i++) {