From 8617d29abbd56c013d1fe95a8890472d7a61befe Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 26 Mar 2021 10:09:45 +0100 Subject: [PATCH] qemuBuildPanicCommandLine: Generate via JSON MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/qemu/qemu_command.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) 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++) {