From: Peter Krempa Date: Fri, 26 Mar 2021 09:09:45 +0000 (+0100) Subject: qemuBuildPanicCommandLine: Generate via JSON X-Git-Tag: v7.9.0-rc1~177 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8617d29abbd56c013d1fe95a8890472d7a61befe;p=thirdparty%2Flibvirt.git 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= - (default: 1285) Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index cbca9d4698..ee882da9e7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10187,25 +10187,36 @@ qemuBuildVMCoreInfoCommandLine(virCommand *cmd, static int qemuBuildPanicCommandLine(virCommand *cmd, - const virDomainDef *def) + const virDomainDef *def, + virQEMUCaps *qemuCaps) { size_t i; for (i = 0; i < def->npanics; i++) { switch ((virDomainPanicModel) def->panics[i]->model) { - case VIR_DOMAIN_PANIC_MODEL_ISA: - switch (def->panics[i]->info.type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: - virCommandAddArg(cmd, "-device"); - virCommandAddArgFormat(cmd, "pvpanic,ioport=%d", - def->panics[i]->info.addr.isa.iobase); - break; + case VIR_DOMAIN_PANIC_MODEL_ISA: { + g_autoptr(virJSONValue) props = NULL; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: - virCommandAddArgList(cmd, "-device", "pvpanic", NULL); - break; + if (virJSONValueObjectCreate(&props, + "s:driver", "pvpanic", + NULL) < 0) + 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; + + break; + } + case VIR_DOMAIN_PANIC_MODEL_S390: case VIR_DOMAIN_PANIC_MODEL_HYPERV: case VIR_DOMAIN_PANIC_MODEL_PSERIES: @@ -10870,7 +10881,7 @@ qemuBuildCommandLine(virQEMUDriver *driver, if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0) return NULL; - if (qemuBuildPanicCommandLine(cmd, def) < 0) + if (qemuBuildPanicCommandLine(cmd, def, qemuCaps) < 0) return NULL; for (i = 0; i < def->nshmems; i++) {