[PATCH 00/13] qemu: Refactor panic action handling and introduce 'preserve-running' action for <on_crash>
See last patch for justification of the new feature, the rest of the patches cleans up existing code. Peter Krempa (13): qemu: Always assume support for 'QEMU_CAPS_SET_ACTION' qemu: Remove unused 'qemuProcessRebootAllowed' qemu: monitor: Remove support for 'watchdog-set-action' qemu: Remove 'allowReboot' field qemu: capabilities: Retire QEMU_CAPS_SET_ACTION qemuProcessSetupLifecycleActions: Prepare to handle other actions qemuDomainModifyLifecycleActionLive: Prepare to handle other actions processGuestPanicEvent: Don't pass panic action via parameter conf: Use proper enum types for 'onReboot', 'onPoweroff', 'onCrash', and 'onLockFailure' qemuMonitorGuestPanicEventInfoFormatMsg: Directly return message qemuProcessGuestPanicEventInfo: Fold into only caller qemu: processGuestPanicEvent: Split individual steps under separate conditions Add support for keeping VM running when panic notifier is used docs/formatdomain.rst | 3 + include/libvirt/libvirt-domain.h | 1 + src/conf/domain_conf.c | 12 +- src/conf/domain_conf.h | 9 +- src/conf/schemas/domaincommon.rng | 2 + src/libxl/libxl_conf.c | 1 + src/libxl/libxl_domain.c | 3 + src/libxl/xen_common.c | 10 +- src/qemu/qemu_capabilities.c | 3 +- src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_command.c | 13 +- src/qemu/qemu_domain.c | 33 --- src/qemu/qemu_domain.h | 17 -- src/qemu/qemu_driver.c | 189 +++++++++++------- src/qemu/qemu_hotplug.c | 10 +- src/qemu/qemu_monitor.c | 52 ++--- src/qemu/qemu_monitor.h | 4 - src/qemu/qemu_monitor_json.c | 22 -- src/qemu/qemu_monitor_json.h | 5 - src/qemu/qemu_process.c | 88 +++----- src/qemu/qemu_process.h | 2 - src/qemu/qemu_validate.c | 14 +- .../caps_10.0.0_aarch64.xml | 1 - .../caps_10.0.0_ppc64.xml | 1 - .../caps_10.0.0_s390x.xml | 1 - .../caps_10.0.0_x86_64+amdsev.xml | 1 - .../caps_10.0.0_x86_64.xml | 1 - .../caps_10.1.0_s390x.xml | 1 - .../caps_10.1.0_x86_64+inteltdx.xml | 1 - .../caps_10.1.0_x86_64.xml | 1 - .../caps_10.2.0_aarch64.xml | 1 - .../caps_10.2.0_x86_64+mshv.xml | 1 - .../caps_10.2.0_x86_64.xml | 1 - .../caps_11.0.0_aarch64.xml | 1 - .../caps_11.0.0_s390x.xml | 1 - .../caps_11.0.0_x86_64+sgx.xml | 1 - .../caps_11.0.0_x86_64.xml | 1 - .../caps_11.1.0_aarch64.xml | 1 - .../caps_11.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 - .../caps_7.2.0_x86_64+hvf.xml | 1 - .../caps_7.2.0_x86_64.xml | 1 - .../caps_8.0.0_x86_64.xml | 1 - .../qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 - .../caps_8.1.0_x86_64.xml | 1 - .../caps_8.2.0_aarch64.xml | 1 - .../caps_8.2.0_armv7l.xml | 1 - .../caps_8.2.0_loongarch64.xml | 1 - .../qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 - .../caps_8.2.0_x86_64.xml | 1 - .../qemucapabilitiesdata/caps_9.0.0_sparc.xml | 1 - .../caps_9.0.0_x86_64.xml | 1 - .../caps_9.1.0_riscv64.xml | 1 - .../qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 - .../caps_9.1.0_x86_64.xml | 1 - .../caps_9.2.0_aarch64+hvf.xml | 1 - .../qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 - .../caps_9.2.0_x86_64+amdsev.xml | 1 - .../caps_9.2.0_x86_64.xml | 1 - .../qemustatusxml2xmldata/backup-pull-in.xml | 1 - .../blockjob-blockdev-in.xml | 1 - .../blockjob-mirror-in.xml | 1 - .../memory-backing-dir-in.xml | 1 - .../migration-in-params-in.xml | 1 - .../migration-out-nbd-bitmaps-in.xml | 1 - .../migration-out-nbd-out.xml | 1 - .../migration-out-nbd-tls-out.xml | 1 - .../migration-out-params-in.xml | 1 - tests/qemustatusxml2xmldata/modern-in.xml | 1 - .../qcow2-data-file-in.xml | 1 - .../throttlefilter-out.xml | 1 - tests/qemustatusxml2xmldata/upgrade-out.xml | 1 - .../qemustatusxml2xmldata/vcpus-multi-in.xml | 1 - .../async-teardown.x86_64-latest.xml | 2 +- tests/qemuxmlconfdata/async-teardown.xml | 2 +- tests/qemuxmlconftest.c | 1 + tools/virsh-domain.c | 3 +- 77 files changed, 209 insertions(+), 345 deletions(-) -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> The 'set-action' QMP command was introduced in qemu-6.0 and can't be disabled in any way. Oldest qemu we support is qemu-7.2 so all versions now have it. Remove all conditional code which depends on the 'set-action' command. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 13 +++---------- src/qemu/qemu_driver.c | 16 ---------------- src/qemu/qemu_hotplug.c | 10 +--------- src/qemu/qemu_process.c | 31 +------------------------------ src/qemu/qemu_validate.c | 14 ++------------ 5 files changed, 7 insertions(+), 77 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 95e2ea9a6b..a76a034158 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6184,16 +6184,9 @@ qemuBuildPMCommandLine(virCommand *cmd, { virQEMUCaps *qemuCaps = priv->qemuCaps; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) { - /* with new qemu we always want '-no-shutdown' on startup and we set - * all the other behaviour later during startup */ - virCommandAddArg(cmd, "-no-shutdown"); - } else { - if (priv->allowReboot == VIR_TRISTATE_BOOL_NO) - virCommandAddArg(cmd, "-no-reboot"); - else - virCommandAddArg(cmd, "-no-shutdown"); - } + /* with new qemu we always want '-no-shutdown' on startup and we set + * all the other behaviour later during startup */ + virCommandAddArg(cmd, "-no-shutdown"); /* Use old syntax of -no-acpi only if qemu didn't report that it supports the * new syntax */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bdc0cff66a..71308770f6 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19548,9 +19548,6 @@ qemuDomainModifyLifecycleActionLive(virDomainObj *vm, qemuDomainObjPrivate *priv = vm->privateData; int rc; - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) - return 0; - /* For now we only update 'reboot' action here as we want to keep the * shutdown action as is (we're emulating the outcome anyways)) */ if (type != VIR_DOMAIN_LIFECYCLE_REBOOT || @@ -19600,7 +19597,6 @@ qemuDomainSetLifecycleAction(virDomainPtr dom, { virQEMUDriver *driver = dom->conn->privateData; g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); - qemuDomainObjPrivate *priv; virDomainObj *vm = NULL; virDomainDef *def = NULL; virDomainDef *persistentDef = NULL; @@ -19617,8 +19613,6 @@ qemuDomainSetLifecycleAction(virDomainPtr dom, if (!(vm = qemuDomainObjFromDomain(dom))) goto cleanup; - priv = vm->privateData; - if (virDomainSetLifecycleActionEnsureACL(dom->conn, vm->def) < 0) goto cleanup; @@ -19633,16 +19627,6 @@ qemuDomainSetLifecycleAction(virDomainPtr dom, goto endjob; if (def) { - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) { - if (priv->allowReboot == VIR_TRISTATE_BOOL_NO || - (type == VIR_DOMAIN_LIFECYCLE_REBOOT && - def->onReboot != action)) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("cannot update lifecycle action because QEMU was started with incompatible -no-reboot setting")); - goto endjob; - } - } - if (qemuDomainModifyLifecycleActionLive(vm, type, action) < 0) goto endjob; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 5be567b510..8990a716fa 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3061,7 +3061,7 @@ qemuDomainAttachWatchdog(virDomainObj *vm, if (vm->def->nwatchdogs) { /* Domain already has a watchdog and all must have the same action. */ rv = 0; - } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) { + } else { /* QEMU doesn't have a 'dump' action; we tell qemu to 'pause', then libvirt listens for the watchdog event, and we perform the dump ourselves. so convert 'dump' to 'pause' for the qemu cli */ @@ -3103,14 +3103,6 @@ qemuDomainAttachWatchdog(virDomainObj *vm, QEMU_MONITOR_ACTION_REBOOT_KEEP, watchdogaction, QEMU_MONITOR_ACTION_PANIC_KEEP); - } else { - virDomainWatchdogAction actualAction = watchdog->action; - - if (actualAction == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) - actualAction = VIR_DOMAIN_WATCHDOG_ACTION_PAUSE; - - rv = qemuMonitorSetWatchdogAction(priv->mon, - virDomainWatchdogActionTypeToString(actualAction)); } if (rv >= 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 4c94ff3c91..646ddda7e9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6898,24 +6898,6 @@ qemuProcessRebootAllowed(const virDomainDef *def) } -static void -qemuProcessPrepareAllowReboot(virDomainObj *vm) -{ - virDomainDef *def = vm->def; - qemuDomainObjPrivate *priv = vm->privateData; - - /* with 'set-action' QMP command we don't need to keep this around as - * we always update qemu with the proper state */ - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) - return; - - if (priv->allowReboot != VIR_TRISTATE_BOOL_ABSENT) - return; - - priv->allowReboot = virTristateBoolFromBool(qemuProcessRebootAllowed(def)); -} - - static int qemuProcessUpdateSEVInfo(virDomainObj *vm) { @@ -7087,8 +7069,6 @@ qemuProcessPrepareDomain(virQEMUDriver *driver, /* Track if this domain remembers original owner */ priv->rememberOwner = cfg->rememberOwner; - qemuProcessPrepareAllowReboot(vm); - /* * Normally PCI addresses are assigned in the virDomainCreate * or virDomainDefine methods. We might still need to assign @@ -8216,9 +8196,6 @@ qemuProcessSetupLifecycleActions(virDomainObj *vm, qemuDomainObjPrivate *priv = vm->privateData; int rc; - if (!(virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION))) - return 0; - /* for now we handle only onReboot->destroy here as an alternative to * '-no-reboot' on the commandline */ if (vm->def->onReboot != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY) @@ -9909,10 +9886,6 @@ qemuProcessReconnect(void *opaque) if (qemuExtDevicesInitPaths(cfg, obj->def) < 0) goto error; - /* If we are connecting to a guest started by old libvirt there is no - * allowReboot in status XML and we need to initialize it. */ - qemuProcessPrepareAllowReboot(obj); - if (qemuHostdevUpdateActiveDomainDevices(driver, obj->def) < 0) goto error; @@ -10147,9 +10120,7 @@ qemuProcessReconnect(void *opaque) * domain crashed; otherwise, if the monitor was started, * then we can blame ourselves, else we failed before the * monitor started so we don't really know. */ - if (!priv->mon && tryMonReconn && - (priv->allowReboot == VIR_TRISTATE_BOOL_YES || - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION))) + if (!priv->mon && tryMonReconn) state = VIR_DOMAIN_SHUTOFF_CRASHED; else if (priv->mon) state = VIR_DOMAIN_SHUTOFF_DAEMON; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 439d4b1916..ae1edf435a 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3658,10 +3658,7 @@ qemuValidateDomainDeviceDefDiskBlkdeviotune(const virDomainDiskDef *disk, static int -qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk, - const virDomainDef *def, - virQEMUCaps *qemuCaps) - +qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk) { virStorageType actualType = virStorageSourceGetActualType(disk->src); @@ -3695,13 +3692,6 @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk, } if (disk->transientShareBacking == VIR_TRISTATE_BOOL_YES) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SET_ACTION) && - !qemuProcessRebootAllowed(def)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("transient disk backing image sharing with destroy action of lifecycle isn't supported by this QEMU binary")); - return -1; - } - /* sharing the backing file requires hotplug of the disk in the qemu driver */ switch (disk->bus) { case VIR_DOMAIN_DISK_BUS_USB: @@ -3747,7 +3737,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk, if (qemuValidateDomainDeviceDefDiskBlkdeviotune(disk, def) < 0) return -1; - if (qemuValidateDomainDeviceDefDiskTransient(disk, def, qemuCaps) < 0) + if (qemuValidateDomainDeviceDefDiskTransient(disk) < 0) return -1; if (disk->src->shared && !disk->src->readonly && -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
The 'set-action' QMP command was introduced in qemu-6.0 and can't be disabled in any way. Oldest qemu we support is qemu-7.2 so all versions now have it.
Remove all conditional code which depends on the 'set-action' command.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 13 +++---------- src/qemu/qemu_driver.c | 16 ---------------- src/qemu/qemu_hotplug.c | 10 +--------- src/qemu/qemu_process.c | 31 +------------------------------ src/qemu/qemu_validate.c | 14 ++------------ 5 files changed, 7 insertions(+), 77 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_process.c | 18 ------------------ src/qemu/qemu_process.h | 2 -- 2 files changed, 20 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 646ddda7e9..a1cdce6d17 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6880,24 +6880,6 @@ qemuProcessPrepareDomainHostdevs(virDomainObj *vm, } -/** - * qemuProcessRebootAllowed: - * @def: domain definition - * - * This function encapsulates the logic which dictated whether '-no-reboot' was - * used instead of '-no-shutdown' which is used QEMU versions which don't - * support the 'set-action' QMP command. - */ -bool -qemuProcessRebootAllowed(const virDomainDef *def) -{ - return def->onReboot != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY || - def->onPoweroff != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY || - (def->onCrash != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY && - def->onCrash != VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY); -} - - static int qemuProcessUpdateSEVInfo(virDomainObj *vm) { diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 5874214596..2db5186e08 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -258,8 +258,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuProcessQMP, qemuProcessQMPFree); int qemuProcessQMPStart(qemuProcessQMP *proc); -bool qemuProcessRebootAllowed(const virDomainDef *def); - void qemuProcessCleanupMigrationJob(virQEMUDriver *driver, virDomainObj *vm); -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_process.c | 18 ------------------ src/qemu/qemu_process.h | 2 -- 2 files changed, 20 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> We now use 'set-action' instead. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor.c | 12 ------------ src/qemu/qemu_monitor.h | 4 ---- src/qemu/qemu_monitor_json.c | 22 ---------------------- src/qemu/qemu_monitor_json.h | 5 ----- 4 files changed, 43 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index d0acd31c05..59b3671de9 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3965,18 +3965,6 @@ qemuMonitorMemoryDeviceSizeChangeFree(qemuMonitorMemoryDeviceSizeChangePtr info) } -int -qemuMonitorSetWatchdogAction(qemuMonitor *mon, - const char *action) -{ - VIR_DEBUG("watchdogAction=%s", action); - - QEMU_CHECK_MONITOR(mon); - - return qemuMonitorJSONSetWatchdogAction(mon, action); -} - - /** * qemuMonitorBlockdevCreate: * @mon: monitor object diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c2afb580e4..3298095e9c 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1640,10 +1640,6 @@ qemuMonitorSetBlockThreshold(qemuMonitor *mon, const char *nodename, unsigned long long threshold); -int -qemuMonitorSetWatchdogAction(qemuMonitor *mon, - const char *action); - int qemuMonitorBlockdevCreate(qemuMonitor *mon, const char *jobname, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 21f4d613b7..af9a77ed3b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -7873,28 +7873,6 @@ qemuMonitorJSONSetBlockThreshold(qemuMonitor *mon, } -int -qemuMonitorJSONSetWatchdogAction(qemuMonitor *mon, - const char *action) -{ - g_autoptr(virJSONValue) cmd = NULL; - g_autoptr(virJSONValue) reply = NULL; - - if (!(cmd = qemuMonitorJSONMakeCommand("watchdog-set-action", - "s:action", action, - NULL))) - return -1; - - if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) - return -1; - - if (qemuMonitorJSONCheckError(cmd, reply) < 0) - return -1; - - return 0; -} - - int qemuMonitorJSONBlockdevCreate(qemuMonitor *mon, const char *jobname, diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index f4c093d717..3b7b04a11d 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -633,11 +633,6 @@ qemuMonitorJSONSetBlockThreshold(qemuMonitor *mon, unsigned long long threshold) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -int -qemuMonitorJSONSetWatchdogAction(qemuMonitor *mon, - const char *action) - ATTRIBUTE_NONNULL(1); - int qemuMonitorJSONBlockdevCreate(qemuMonitor *mon, const char *jobname, -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
We now use 'set-action' instead.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor.c | 12 ------------ src/qemu/qemu_monitor.h | 4 ---- src/qemu/qemu_monitor_json.c | 22 ---------------------- src/qemu/qemu_monitor_json.h | 5 ----- 4 files changed, 43 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> The value is no longer used. Remove it including the status XML handling. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 33 ------------------- src/qemu/qemu_domain.h | 17 ---------- .../qemustatusxml2xmldata/backup-pull-in.xml | 1 - .../blockjob-blockdev-in.xml | 1 - .../blockjob-mirror-in.xml | 1 - .../memory-backing-dir-in.xml | 1 - .../migration-in-params-in.xml | 1 - .../migration-out-nbd-bitmaps-in.xml | 1 - .../migration-out-nbd-out.xml | 1 - .../migration-out-nbd-tls-out.xml | 1 - .../migration-out-params-in.xml | 1 - tests/qemustatusxml2xmldata/modern-in.xml | 1 - .../qcow2-data-file-in.xml | 1 - .../throttlefilter-out.xml | 1 - tests/qemustatusxml2xmldata/upgrade-out.xml | 1 - .../qemustatusxml2xmldata/vcpus-multi-in.xml | 1 - 16 files changed, 64 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e1b805d906..a4e5f92840 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1946,8 +1946,6 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivate *priv) priv->rememberOwner = false; - priv->allowReboot = VIR_TRISTATE_BOOL_ABSENT; - g_clear_pointer(&priv->migrationCaps, virBitmapFree); virHashRemoveAll(priv->blockjobs); @@ -2621,17 +2619,6 @@ qemuDomainObjPrivateXMLFormatBackups(virBuffer *buf, } -void -qemuDomainObjPrivateXMLFormatAllowReboot(virBuffer *buf, - virTristateBool allowReboot) -{ - if (allowReboot) { - virBufferAsprintf(buf, "<allowReboot value='%s'/>\n", - virTristateBoolTypeToString(allowReboot)); - } -} - - static void qemuDomainObjPrivateXMLFormatPR(virBuffer *buf, qemuDomainObjPrivate *priv) @@ -2812,8 +2799,6 @@ qemuDomainObjPrivateXMLFormat(virBuffer *buf, if (priv->rememberOwner) virBufferAddLit(buf, "<rememberOwner/>\n"); - qemuDomainObjPrivateXMLFormatAllowReboot(buf, priv->allowReboot); - qemuDomainObjPrivateXMLFormatPR(buf, priv); virBufferAsprintf(buf, "<nodename index='%llu'/>\n", priv->nodenameindex); @@ -3302,21 +3287,6 @@ qemuDomainObjPrivateXMLParseBackups(qemuDomainObjPrivate *priv, } -int -qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt, - virTristateBool *allowReboot) -{ - xmlNodePtr node = virXPathNode("./allowReboot", ctxt); - - /* Allow value='default' as the input here, because old versions - * of libvirt produced that output and we need to be able to read - * it back to correctly handle running guests on daemon upgrade */ - return virXMLPropTristateBoolAllowDefault(node, "value", - VIR_XML_PROP_NONE, - allowReboot); -} - - static void qemuDomainObjPrivateXMLParsePR(xmlXPathContextPtr ctxt, bool *prDaemonRunning) @@ -3548,9 +3518,6 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, priv->chardevStdioLogd = virXPathBoolean("boolean(./chardevStdioLogd)", ctxt) == 1; - if (qemuDomainObjPrivateXMLParseAllowReboot(ctxt, &priv->allowReboot) < 0) - return -1; - qemuDomainObjPrivateXMLParsePR(ctxt, &priv->prDaemonRunning); if (qemuDomainObjPrivateXMLParseBlockjobs(vm, priv, ctxt) < 0) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 50ab492023..23e99dc68c 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -134,15 +134,6 @@ struct _qemuDomainObjPrivate { bool fakeReboot; bool fakeReset; bool pausedShutdown; - /* allowReboot: - * - * Unused with new QEMU versions which have QEMU_CAPS_SET_ACTION. - * - * Otherwise if it's set to VIR_TRISTATE_BOOL_YES, QEMU was started with - * -no-shutdown, and if set to VIR_TRISTATE_BOOL_NO qemu was started with - * -no-reboot instead. - */ - virTristateBool allowReboot; unsigned long migMaxBandwidth; char *origname; @@ -1010,14 +1001,6 @@ qemuDomainFixupCPUs(virDomainObj *vm, char * qemuDomainGetMachineName(virDomainObj *vm); -void -qemuDomainObjPrivateXMLFormatAllowReboot(virBuffer *buf, - virTristateBool allowReboot); - -int -qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt, - virTristateBool *allowReboot); - void qemuDomainPrepareDiskSourceData(virDomainDiskDef *disk, virStorageSource *src); diff --git a/tests/qemustatusxml2xmldata/backup-pull-in.xml b/tests/qemustatusxml2xmldata/backup-pull-in.xml index 2cedcc3cf2..fcaff2e38a 100644 --- a/tests/qemustatusxml2xmldata/backup-pull-in.xml +++ b/tests/qemustatusxml2xmldata/backup-pull-in.xml @@ -233,7 +233,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-4-copy'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/4-copy'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='yes'> diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml index 1c45fad370..58afae4168 100644 --- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml +++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml @@ -232,7 +232,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-4-copy'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/4-copy'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='yes'> diff --git a/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml b/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml index df11e83ced..be85202c02 100644 --- a/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml +++ b/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml @@ -22,7 +22,6 @@ <libDir path='/tmp'/> <channelTargetDir path='/var/lib/libvirt/qemu/channel/target'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1-QEMUGuest1'/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='yes'/> diff --git a/tests/qemustatusxml2xmldata/memory-backing-dir-in.xml b/tests/qemustatusxml2xmldata/memory-backing-dir-in.xml index eea671a41c..a1a1845495 100644 --- a/tests/qemustatusxml2xmldata/memory-backing-dir-in.xml +++ b/tests/qemustatusxml2xmldata/memory-backing-dir-in.xml @@ -22,7 +22,6 @@ <libDir path='/tmp'/> <channelTargetDir path='/var/lib/libvirt/qemu/channel/target'/> <memoryBackingDir path='/some/random/path/1-QEMUGuest1'/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/migration-in-params-in.xml b/tests/qemustatusxml2xmldata/migration-in-params-in.xml index 861d8eeadb..986e5455aa 100644 --- a/tests/qemustatusxml2xmldata/migration-in-params-in.xml +++ b/tests/qemustatusxml2xmldata/migration-in-params-in.xml @@ -256,7 +256,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-1-nest'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1-nest'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml b/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml index 5d76545513..4f1fb07c1b 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml @@ -342,7 +342,6 @@ </cpu> <chardevStdioLogd/> <rememberOwner/> - <allowReboot value='yes'/> <nodename index='3'/> <fdset index='0'/> <blockjobs active='yes'> diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml b/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml index 581cf28286..a69d1c4590 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-out.xml @@ -259,7 +259,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-4-upstream'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/4-upstream'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml b/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml index dacaa3e42f..86a7fbc187 100644 --- a/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml +++ b/tests/qemustatusxml2xmldata/migration-out-nbd-tls-out.xml @@ -288,7 +288,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-3-upstream'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/3-upstream'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/migration-out-params-in.xml b/tests/qemustatusxml2xmldata/migration-out-params-in.xml index b914236b62..f4e921ab38 100644 --- a/tests/qemustatusxml2xmldata/migration-out-params-in.xml +++ b/tests/qemustatusxml2xmldata/migration-out-params-in.xml @@ -270,7 +270,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-7-nest'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/7-nest'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxml2xmldata/modern-in.xml index 050669f554..422a04f3ca 100644 --- a/tests/qemustatusxml2xmldata/modern-in.xml +++ b/tests/qemustatusxml2xmldata/modern-in.xml @@ -260,7 +260,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-1-upstream'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1-upstream'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='123'/> <fdset index='321'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/qcow2-data-file-in.xml b/tests/qemustatusxml2xmldata/qcow2-data-file-in.xml index 2675214417..951b4abfbe 100644 --- a/tests/qemustatusxml2xmldata/qcow2-data-file-in.xml +++ b/tests/qemustatusxml2xmldata/qcow2-data-file-in.xml @@ -22,7 +22,6 @@ <libDir path='/tmp'/> <channelTargetDir path='/var/lib/libvirt/qemu/channel/target'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1-QEMUGuest1'/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/throttlefilter-out.xml b/tests/qemustatusxml2xmldata/throttlefilter-out.xml index 8751a42cce..eee01c79b1 100644 --- a/tests/qemustatusxml2xmldata/throttlefilter-out.xml +++ b/tests/qemustatusxml2xmldata/throttlefilter-out.xml @@ -233,7 +233,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-4-copy'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/4-copy'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/upgrade-out.xml b/tests/qemustatusxml2xmldata/upgrade-out.xml index c7bc7128df..fd1c174200 100644 --- a/tests/qemustatusxml2xmldata/upgrade-out.xml +++ b/tests/qemustatusxml2xmldata/upgrade-out.xml @@ -258,7 +258,6 @@ <channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-1-upstream'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1-upstream'/> <chardevStdioLogd/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> diff --git a/tests/qemustatusxml2xmldata/vcpus-multi-in.xml b/tests/qemustatusxml2xmldata/vcpus-multi-in.xml index 6ee688ce03..1d5b34c2b6 100644 --- a/tests/qemustatusxml2xmldata/vcpus-multi-in.xml +++ b/tests/qemustatusxml2xmldata/vcpus-multi-in.xml @@ -308,7 +308,6 @@ <libDir path='/tmp'/> <channelTargetDir path='/var/lib/libvirt/qemu/channel/target'/> <memoryBackingDir path='/var/lib/libvirt/qemu/ram/1729-QEMUGuest1'/> - <allowReboot value='yes'/> <nodename index='0'/> <fdset index='0'/> <blockjobs active='no'/> -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
The value is no longer used. Remove it including the status XML handling.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 33 ------------------- src/qemu/qemu_domain.h | 17 ---------- .../qemustatusxml2xmldata/backup-pull-in.xml | 1 - .../blockjob-blockdev-in.xml | 1 - .../blockjob-mirror-in.xml | 1 - .../memory-backing-dir-in.xml | 1 - .../migration-in-params-in.xml | 1 - .../migration-out-nbd-bitmaps-in.xml | 1 - .../migration-out-nbd-out.xml | 1 - .../migration-out-nbd-tls-out.xml | 1 - .../migration-out-params-in.xml | 1 - tests/qemustatusxml2xmldata/modern-in.xml | 1 - .../qcow2-data-file-in.xml | 1 - .../throttlefilter-out.xml | 1 - tests/qemustatusxml2xmldata/upgrade-out.xml | 1 - .../qemustatusxml2xmldata/vcpus-multi-in.xml | 1 - 16 files changed, 64 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> The capability is no longer used because all qemu versions we support do have the 'set-action' command. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml | 1 - tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 - 39 files changed, 2 insertions(+), 40 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index ebea050453..61e44b398a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -643,7 +643,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "confidential-guest-support", /* QEMU_CAPS_MACHINE_CONFIDENTAL_GUEST_SUPPORT */ "query-display-options", /* X_QEMU_CAPS_QUERY_DISPLAY_OPTIONS */ "s390-pv-guest", /* QEMU_CAPS_S390_PV_GUEST */ - "set-action", /* QEMU_CAPS_SET_ACTION */ + "set-action", /* X_QEMU_CAPS_SET_ACTION */ "virtio-blk.queue-size", /* QEMU_CAPS_VIRTIO_BLK_QUEUE_SIZE */ /* 410 */ @@ -1289,7 +1289,6 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = { { "query-cpu-definitions", QEMU_CAPS_QUERY_CPU_DEFINITIONS }, { "query-cpu-model-baseline", QEMU_CAPS_QUERY_CPU_MODEL_BASELINE }, { "query-cpu-model-comparison", QEMU_CAPS_QUERY_CPU_MODEL_COMPARISON }, - { "set-action", QEMU_CAPS_SET_ACTION }, { "query-dirty-rate", QEMU_CAPS_QUERY_DIRTY_RATE }, { "sev-inject-launch-secret", QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET }, { "calc-dirty-rate", QEMU_CAPS_CALC_DIRTY_RATE }, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index daec874a59..c846771d50 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -617,7 +617,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_MACHINE_CONFIDENTAL_GUEST_SUPPORT, /* -machine confidential-guest-support */ X_QEMU_CAPS_QUERY_DISPLAY_OPTIONS, /* 'query-display-options' qmp command present */ QEMU_CAPS_S390_PV_GUEST, /* -object s390-pv-guest,... */ - QEMU_CAPS_SET_ACTION, /* 'set-action' QMP command */ + X_QEMU_CAPS_SET_ACTION, /* 'set-action' QMP command */ QEMU_CAPS_VIRTIO_BLK_QUEUE_SIZE, /* virtio-blk-*.queue-size */ /* 410 */ diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml index b6434e6019..119a3e171f 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml @@ -109,7 +109,6 @@ <flag name='acpi-index'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml index 0b9613b921..70bf98c404 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml @@ -117,7 +117,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml index 96eadffcec..25d73b6e1d 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml @@ -81,7 +81,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml index 945f7364db..53fd51122c 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml @@ -145,7 +145,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml index 5cd3828f52..ad3fe67638 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -145,7 +145,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml index 584a1b304c..0d46b3b20e 100644 --- a/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml @@ -82,7 +82,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml index 6dd00c360f..242215f7a8 100644 --- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml +++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml @@ -128,7 +128,6 @@ <flag name='acpi-index'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml index e7a0818697..a2faddcced 100644 --- a/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml index df3e2a8275..00c0b8c86f 100644 --- a/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml @@ -122,7 +122,6 @@ <flag name='input-linux'/> <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml index 54018639ad..530c0366ea 100644 --- a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml +++ b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml @@ -135,7 +135,6 @@ <flag name='acpi-index'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml index d5cc279e13..b2cd261b99 100644 --- a/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml index 3fdc0d6621..c987072f6b 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml @@ -122,7 +122,6 @@ <flag name='input-linux'/> <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml index 99fccc9739..07ee859318 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml @@ -82,7 +82,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml index bac7951f73..108f4b0b86 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml +++ b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml index 8724ce5b56..29fdaf20d8 100644 --- a/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml index b45dd83889..9e14171d64 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml @@ -122,7 +122,6 @@ <flag name='input-linux'/> <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml index 7a4396c82b..e32cedca2f 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index bc5953f43e..bf67b3d295 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -109,7 +109,6 @@ <flag name='input-linux'/> <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='piix4.acpi-root-pci-hotplug'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index 425c608863..f40d77baa5 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -146,7 +146,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index 93fe36f48c..8d44ed71e0 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index 592df7049b..fcbb68e415 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml index 2c540f7f30..65f73d1af8 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml @@ -77,7 +77,6 @@ <flag name='input-linux'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index b29325a465..c730dd7174 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml index bb70bcaf1f..20eb5f5d50 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -115,7 +115,6 @@ <flag name='acpi-index'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml index 9590bc464a..042458fba8 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -120,7 +120,6 @@ <flag name='input-linux'/> <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index 640438623a..95eb2dfa21 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -108,7 +108,6 @@ <flag name='acpi-index'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml index a254e16741..45ab66ec29 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -77,7 +77,6 @@ <flag name='input-linux'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index 57aa43adab..b46505d24b 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml b/tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml index c2710ecab1..44ddfb0f76 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml @@ -37,7 +37,6 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> <flag name='query-dirty-rate'/> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index 3b4aaa202c..2f361bd1c8 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -147,7 +147,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml index b5ca67b445..f04b2fd302 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml @@ -113,7 +113,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml index 02c8e6f641..990fe255f6 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml @@ -81,7 +81,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml index 65d279f5ea..07d7562c84 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -145,7 +145,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml index 9c843f9e5c..166762e855 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml @@ -87,7 +87,6 @@ <flag name='rotation-rate'/> <flag name='acpi-index'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='netdev.json'/> <flag name='query-dirty-rate'/> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml index 135812b527..a8f830076e 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml @@ -81,7 +81,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='memory-backend-file.reserve'/> <flag name='netdev.json'/> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml index af4b8bbc3e..f67222578d 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml @@ -146,7 +146,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml index 933698d99f..efd3eeb9c7 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml @@ -145,7 +145,6 @@ <flag name='virtio-gpu-gl-pci'/> <flag name='virtio-vga-gl'/> <flag name='confidential-guest-support'/> - <flag name='set-action'/> <flag name='virtio-blk.queue-size'/> <flag name='virtio-mem-pci'/> <flag name='memory-backend-file.reserve'/> -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
The capability is no longer used because all qemu versions we support do have the 'set-action' command.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_ppc64.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 1 - tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_x86_64+inteltdx.xml | 1 - tests/qemucapabilitiesdata/caps_10.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_x86_64+mshv.xml | 1 - tests/qemucapabilitiesdata/caps_10.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_x86_64+sgx.xml | 1 - tests/qemucapabilitiesdata/caps_11.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 - tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.0.0_sparc.xml | 1 - tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 1 - tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 - 39 files changed, 2 insertions(+), 40 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> Rework the code so that it'll be possible to easily extend it to set other lifecycle actions in qemu. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_process.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a1cdce6d17..397082ef04 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8176,21 +8176,27 @@ qemuProcessSetupLifecycleActions(virDomainObj *vm, virDomainAsyncJob asyncJob) { qemuDomainObjPrivate *priv = vm->privateData; + qemuMonitorActionShutdown shutdown = QEMU_MONITOR_ACTION_SHUTDOWN_KEEP; + qemuMonitorActionReboot reboot = QEMU_MONITOR_ACTION_REBOOT_KEEP; + qemuMonitorActionWatchdog watchdog = QEMU_MONITOR_ACTION_WATCHDOG_KEEP; + qemuMonitorActionPanic panic = QEMU_MONITOR_ACTION_PANIC_KEEP; int rc; /* for now we handle only onReboot->destroy here as an alternative to * '-no-reboot' on the commandline */ - if (vm->def->onReboot != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY) + if (vm->def->onReboot == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY) + reboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN; + + if (shutdown == QEMU_MONITOR_ACTION_SHUTDOWN_KEEP && + reboot == QEMU_MONITOR_ACTION_REBOOT_KEEP && + watchdog == QEMU_MONITOR_ACTION_WATCHDOG_KEEP && + panic == QEMU_MONITOR_ACTION_PANIC_KEEP) return 0; if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) return -1; - rc = qemuMonitorSetAction(priv->mon, - QEMU_MONITOR_ACTION_SHUTDOWN_KEEP, - QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN, - QEMU_MONITOR_ACTION_WATCHDOG_KEEP, - QEMU_MONITOR_ACTION_PANIC_KEEP); + rc = qemuMonitorSetAction(priv->mon, shutdown, reboot, watchdog, panic); qemuDomainObjExitMonitor(vm); if (rc < 0) -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> Rework the code so that it'll be possible to easily extend it to set other lifecycle actions in qemu. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 55 ++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 71308770f6..c64e5bb4f5 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19544,42 +19544,51 @@ qemuDomainModifyLifecycleActionLive(virDomainObj *vm, virDomainLifecycle type, virDomainLifecycleAction action) { - qemuMonitorActionReboot monReboot = QEMU_MONITOR_ACTION_REBOOT_KEEP; + qemuMonitorActionShutdown shutdown = QEMU_MONITOR_ACTION_SHUTDOWN_KEEP; + qemuMonitorActionReboot reboot = QEMU_MONITOR_ACTION_REBOOT_KEEP; + qemuMonitorActionWatchdog watchdog = QEMU_MONITOR_ACTION_WATCHDOG_KEEP; + qemuMonitorActionPanic panic = QEMU_MONITOR_ACTION_PANIC_KEEP; qemuDomainObjPrivate *priv = vm->privateData; int rc; - /* For now we only update 'reboot' action here as we want to keep the - * shutdown action as is (we're emulating the outcome anyways)) */ - if (type != VIR_DOMAIN_LIFECYCLE_REBOOT || - vm->def->onReboot == action) - return 0; + switch (type) { + case VIR_DOMAIN_LIFECYCLE_REBOOT: + if (vm->def->onReboot == action) + break; + switch (action) { + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + reboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN; + break; - switch (action) { - case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: - monReboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN; - break; + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + reboot = QEMU_MONITOR_ACTION_REBOOT_RESET; + break; - case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: - monReboot = QEMU_MONITOR_ACTION_REBOOT_RESET; + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } break; - case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: - case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: - case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: - case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: - case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: - return 0; + case VIR_DOMAIN_LIFECYCLE_POWEROFF: + case VIR_DOMAIN_LIFECYCLE_CRASH: + case VIR_DOMAIN_LIFECYCLE_LAST: + break; } + if (shutdown == QEMU_MONITOR_ACTION_SHUTDOWN_KEEP && + reboot == QEMU_MONITOR_ACTION_REBOOT_KEEP && + watchdog == QEMU_MONITOR_ACTION_WATCHDOG_KEEP && + panic == QEMU_MONITOR_ACTION_PANIC_KEEP) + return 0; qemuDomainObjEnterMonitor(vm); - rc = qemuMonitorSetAction(priv->mon, - QEMU_MONITOR_ACTION_SHUTDOWN_KEEP, - monReboot, - QEMU_MONITOR_ACTION_WATCHDOG_KEEP, - QEMU_MONITOR_ACTION_PANIC_KEEP); + rc = qemuMonitorSetAction(priv->mon, shutdown, reboot, watchdog, panic); qemuDomainObjExitMonitor(vm); if (rc < 0) -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> 'processGuestPanicEvent' gets the full domain object; there's no point passing it via 'struct qemuProcessEvent'. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 6 ++---- src/qemu/qemu_process.c | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c64e5bb4f5..663e6c33cf 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3615,7 +3615,6 @@ qemuProcessGuestPanicEventInfo(virQEMUDriver *driver, static void processGuestPanicEvent(virQEMUDriver *driver, virDomainObj *vm, - int action, qemuMonitorEventPanicInfo *info) { qemuDomainObjPrivate *priv = vm->privateData; @@ -3650,7 +3649,7 @@ processGuestPanicEvent(virQEMUDriver *driver, VIR_WARN("Unable to release lease on %s", vm->def->name); VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); - switch (action) { + switch (vm->def->onCrash) { case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: if (doCoreDumpToAutoDumpPath(driver, vm, flags) < 0) goto endjob; @@ -4208,8 +4207,7 @@ qemuProcessEventHandler(void *data, processWatchdogEvent(driver, vm, processEvent->action); break; case QEMU_PROCESS_EVENT_GUESTPANIC: - processGuestPanicEvent(driver, vm, processEvent->action, - processEvent->data); + processGuestPanicEvent(driver, vm, processEvent->data); break; case QEMU_PROCESS_EVENT_DEVICE_DELETED: processDeviceDeletedEvent(driver, vm, processEvent->data); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 397082ef04..8389819ee4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1359,8 +1359,7 @@ qemuProcessHandleGuestPanic(qemuMonitor *mon G_GNUC_UNUSED, { virObjectLock(vm); - qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_GUESTPANIC, - vm->def->onCrash, 0, info); + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_GUESTPANIC, 0, 0, info); virObjectUnlock(vm); } -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> This ensures that 'switch' statements work correctly. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/domain_conf.c | 10 ++++++---- src/conf/domain_conf.h | 9 ++++----- src/libxl/xen_common.c | 10 +++++++--- src/qemu/qemu_driver.c | 2 ++ 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 17c4a57cd8..ab5138acbc 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14168,21 +14168,23 @@ static int virDomainEventActionParseXML(xmlXPathContextPtr ctxt, const char *name, const char *xpath, - int *val, - int defaultVal, + unsigned int *val, + unsigned int defaultVal, virEventActionFromStringFunc convFunc) { g_autofree char *tmp = virXPathString(xpath, ctxt); + int tmpval; if (tmp == NULL) { *val = defaultVal; } else { - *val = convFunc(tmp); - if (*val < 0) { + tmpval = convFunc(tmp); + if (tmpval < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown %1$s action: %2$s"), name, tmp); return -1; } + *val = tmpval; } return 0; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0c6c79c413..91f57de0f1 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3250,12 +3250,11 @@ struct _virDomainDef { virDomainResourceDef *resource; virDomainIdMapDef idmap; - /* These 3 are based on virDomainLifecycleAction enum flags */ - int onReboot; - int onPoweroff; - int onCrash; + virDomainLifecycleAction onReboot; + virDomainLifecycleAction onPoweroff; + virDomainLifecycleAction onCrash; - int onLockFailure; /* enum virDomainLockFailureAction */ + virDomainLockFailureAction onLockFailure; virDomainPowerManagement pm; diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c index e6a372e078..4b2e47006a 100644 --- a/src/libxl/xen_common.c +++ b/src/libxl/xen_common.c @@ -336,33 +336,37 @@ xenParseEventsActions(virConf *conf, virDomainDef *def) g_autofree char *on_poweroff = NULL; g_autofree char *on_reboot = NULL; g_autofree char *on_crash = NULL; + int tmp; if (xenConfigGetString(conf, "on_poweroff", &on_poweroff, "destroy") < 0) return -1; - if ((def->onPoweroff = virDomainLifecycleActionTypeFromString(on_poweroff)) < 0) { + if ((tmp = virDomainLifecycleActionTypeFromString(on_poweroff)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected value %1$s for on_poweroff"), on_poweroff); return -1; } + def->onPoweroff = tmp; if (xenConfigGetString(conf, "on_reboot", &on_reboot, "restart") < 0) return -1; - if ((def->onReboot = virDomainLifecycleActionTypeFromString(on_reboot)) < 0) { + if ((tmp = virDomainLifecycleActionTypeFromString(on_reboot)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected value %1$s for on_reboot"), on_reboot); return -1; } + def->onReboot = tmp; if (xenConfigGetString(conf, "on_crash", &on_crash, "restart") < 0) return -1; - if ((def->onCrash = virDomainLifecycleActionTypeFromString(on_crash)) < 0) { + if ((tmp = virDomainLifecycleActionTypeFromString(on_crash)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected value %1$s for on_crash"), on_crash); return -1; } + def->onCrash = tmp; return 0; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 663e6c33cf..2fbd7bc3ee 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3680,6 +3680,8 @@ processGuestPanicEvent(virQEMUDriver *driver, /* the VM is kept around for debugging */ break; + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: default: break; } -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> Remove the 'ret' variable and format the panic string on a single line. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor.c | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 59b3671de9..21df06ebd8 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3881,43 +3881,37 @@ qemuMonitorSetBlockThreshold(qemuMonitor *mon, char * qemuMonitorGuestPanicEventInfoFormatMsg(qemuMonitorEventPanicInfo *info) { - char *ret = NULL; - switch (info->type) { case QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_HYPERV: - ret = g_strdup_printf("hyper-v: arg1='0x%llx', arg2='0x%llx', " - "arg3='0x%llx', arg4='0x%llx', arg5='0x%llx'", - info->data.hyperv.arg1, info->data.hyperv.arg2, - info->data.hyperv.arg3, info->data.hyperv.arg4, - info->data.hyperv.arg5); + return g_strdup_printf("hyper-v: arg1='0x%llx', arg2='0x%llx', arg3='0x%llx', arg4='0x%llx', arg5='0x%llx'", + info->data.hyperv.arg1, info->data.hyperv.arg2, + info->data.hyperv.arg3, info->data.hyperv.arg4, + info->data.hyperv.arg5); break; case QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_S390: - ret = g_strdup_printf("s390: core='%d' psw-mask='0x%016llx' " - "psw-addr='0x%016llx' reason='%s'", - info->data.s390.core, - info->data.s390.psw_mask, - info->data.s390.psw_addr, - info->data.s390.reason); + return g_strdup_printf("s390: core='%d' psw-mask='0x%016llx' psw-addr='0x%016llx' reason='%s'", + info->data.s390.core, + info->data.s390.psw_mask, + info->data.s390.psw_addr, + info->data.s390.reason); break; case QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_TDX: if (info->data.tdx.has_gpa) - ret = g_strdup_printf("tdx: error_code='0x%x' message='%s' " - "additional error information can be found " - "at gpa page: '0x%016llx'", - info->data.tdx.error_code, - info->data.tdx.message, - info->data.tdx.gpa); + return g_strdup_printf("tdx: error_code='0x%x' message='%s' additional error information can be found at gpa page: '0x%016llx'", + info->data.tdx.error_code, + info->data.tdx.message, + info->data.tdx.gpa); else - ret = g_strdup_printf("tdx: error_code='0x%x' message='%s'", - info->data.tdx.error_code, - info->data.tdx.message); + return g_strdup_printf("tdx: error_code='0x%x' message='%s'", + info->data.tdx.error_code, + info->data.tdx.message); break; case QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_NONE: case QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_LAST: break; } - return ret; + return NULL; } -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> Move the code directly to the only place that calls this function. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2fbd7bc3ee..909d51c8cb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3599,19 +3599,6 @@ doCoreDumpToAutoDumpPath(virQEMUDriver *driver, } -static void -qemuProcessGuestPanicEventInfo(virQEMUDriver *driver, - virDomainObj *vm, - qemuMonitorEventPanicInfo *info) -{ - g_autofree char *msg = qemuMonitorGuestPanicEventInfoFormatMsg(info); - g_autofree char *timestamp = virTimeStringNow(); - - if (msg && timestamp) - qemuDomainLogAppendMessage(driver, vm, "%s: panic %s\n", timestamp, msg); -} - - static void processGuestPanicEvent(virQEMUDriver *driver, virDomainObj *vm, @@ -3632,8 +3619,13 @@ processGuestPanicEvent(virQEMUDriver *driver, goto endjob; } - if (info) - qemuProcessGuestPanicEventInfo(driver, vm, info); + if (info) { + g_autofree char *msg = qemuMonitorGuestPanicEventInfoFormatMsg(info); + g_autofree char *timestamp = virTimeStringNow(); + + if (msg && timestamp) + qemuDomainLogAppendMessage(driver, vm, "%s: panic %s\n", timestamp, msg); + } virDomainObjSetState(vm, VIR_DOMAIN_CRASHED, VIR_DOMAIN_CRASHED_PANICKED); -- 2.55.0
From: Peter Krempa <pkrempa@redhat.com> Separate the individual steps (setting of VM state, dumping, unlocking, final state transition) under individual switch statements for future extension. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 62 +++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 909d51c8cb..b83225cf38 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3627,26 +3627,64 @@ processGuestPanicEvent(virQEMUDriver *driver, qemuDomainLogAppendMessage(driver, vm, "%s: panic %s\n", timestamp, msg); } - virDomainObjSetState(vm, VIR_DOMAIN_CRASHED, VIR_DOMAIN_CRASHED_PANICKED); - event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_CRASHED, VIR_DOMAIN_EVENT_CRASHED_PANICKED); - virObjectEventStateQueue(driver->domainEventState, event); - qemuDomainSaveStatus(vm); + /* Update VM state */ + switch (vm->def->onCrash) { + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + virDomainObjSetState(vm, VIR_DOMAIN_CRASHED, VIR_DOMAIN_CRASHED_PANICKED); + qemuDomainSaveStatus(vm); + break; - if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) - VIR_WARN("Unable to release lease on %s", vm->def->name); - VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } + /* Handle state of leases/locks */ switch (vm->def->onCrash) { case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) + VIR_WARN("Unable to release lease on %s", vm->def->name); + VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); + break; + + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } + + /* create core dump */ + switch (vm->def->onCrash) { + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: if (doCoreDumpToAutoDumpPath(driver, vm, flags) < 0) goto endjob; - G_GNUC_FALLTHROUGH; + + break; + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } + + /* final state update */ + switch (vm->def->onCrash) { + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: qemuProcessStop(vm, VIR_DOMAIN_SHUTOFF_CRASHED, VIR_ASYNC_JOB_DUMP, 0); event = virDomainEventLifecycleNewFromObj(vm, @@ -3659,22 +3697,14 @@ processGuestPanicEvent(virQEMUDriver *driver, break; case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: - if (doCoreDumpToAutoDumpPath(driver, vm, flags) < 0) - goto endjob; - G_GNUC_FALLTHROUGH; - case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: qemuDomainSetFakeReboot(vm, true); ignore_value(qemuProcessShutdownOrReboot(vm)); break; case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: - /* the VM is kept around for debugging */ - break; - case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: - default: break; } -- 2.55.0
On a Wednesday in 2026, Peter Krempa via Devel wrote:
From: Peter Krempa <pkrempa@redhat.com>
Separate the individual steps (setting of VM state, dumping, unlocking, final state transition) under individual switch statements for future extension.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 62 +++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 16 deletions(-)
For patches 1-13: Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
From: Peter Krempa <pkrempa@redhat.com> Some guest OSes (e.g. windows) can do an internal crash dump and reboot after a crash. They unfortunately notify the OS before doing the crash dump though so we need a new possibility for the <on_crash> action to keep the VM as is. This patch introduces 'preserve-running' mode for on_crash and wires it up into the qemu driver. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/formatdomain.rst | 3 ++ include/libvirt/libvirt-domain.h | 1 + src/conf/domain_conf.c | 2 ++ src/conf/schemas/domaincommon.rng | 2 ++ src/libxl/libxl_conf.c | 1 + src/libxl/libxl_domain.c | 3 ++ src/qemu/qemu_driver.c | 34 ++++++++++++++++++- src/qemu/qemu_process.c | 18 ++++++++++ .../async-teardown.x86_64-latest.xml | 2 +- tests/qemuxmlconfdata/async-teardown.xml | 2 +- tests/qemuxmlconftest.c | 1 + tools/virsh-domain.c | 3 +- 12 files changed, 68 insertions(+), 4 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index a861f9f177..fa5b62200b 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -2044,6 +2044,9 @@ The ``on_crash`` event supports these additional actions :since:`since 0.8.4`. ``coredump-restart`` The crashed domain's core will be dumped, and then the domain will be restarted with the same configuration +``preserve-running`` + The crashed domain will continue to run. This is useful if the guest OS can + do an internal crash dump and reboot itself. :since:`Since 12.6.0` :since:`Since 3.9.0`, the lifecycle events can be configured via the `virDomainSetLifecycleAction <html/libvirt-libvirt-domain.html#virDomainSetLifecycleAction>`__ diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h index 5b67f8f897..f4dfe9fb1a 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -8228,6 +8228,7 @@ typedef enum { VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE = 3, /* (Since: 3.9.0) */ VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY = 4, /* (Since: 3.9.0) */ VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART = 5, /* (Since: 3.9.0) */ + VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING = 6, /* (Since: 12.6.0) */ # ifdef VIR_ENUM_SENTINELS VIR_DOMAIN_LIFECYCLE_ACTION_LAST /* (Since: 3.9.0) */ diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ab5138acbc..45235d74bc 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -303,6 +303,7 @@ VIR_ENUM_IMPL(virDomainLifecycleAction, "preserve", "coredump-destroy", "coredump-restart", + "preserve-running", ); VIR_ENUM_IMPL(virDomainLockFailure, @@ -5534,6 +5535,7 @@ virDomainDefLifecycleActionAllowed(virDomainLifecycle type, return true; case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: break; } break; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index 121e4e06a6..81ffbfc2fa 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -5035,6 +5035,7 @@ destroy: The domain is cleaned up restart: A new domain is started in place of the old one preserve: The domain will remain in memory until it is destroyed manually + preserve-running: Keep the domain as is, let the guest handle the crash. rename-restart: a variant of the previous one but where the old domain is renamed before being saved to allow a restart coredump-destroy: The crashed domain's core will be dumped, and then the @@ -5051,6 +5052,7 @@ <value>rename-restart</value> <value>coredump-destroy</value> <value>coredump-restart</value> + <value>preserve-running</value> </choice> </define> <!-- diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index d25b92b4de..3bb5c1e591 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -111,6 +111,7 @@ libxlActionFromVirLifecycle(virDomainLifecycleAction action) case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: return LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_RESTART; + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index c6717e31cf..51dc3edcc2 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -509,6 +509,7 @@ libxlDomainShutdownThread(void *opaque) case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: goto endjob; } @@ -529,6 +530,7 @@ libxlDomainShutdownThread(void *opaque) goto endjob; case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: goto endjob; case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: libxlDomainAutoCoreDump(driver, vm); @@ -557,6 +559,7 @@ libxlDomainShutdownThread(void *opaque) case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: goto endjob; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b83225cf38..44b41726fb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3644,6 +3644,11 @@ processGuestPanicEvent(virQEMUDriver *driver, qemuDomainSaveStatus(vm); break; + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: + virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_CRASHED); + qemuDomainSaveStatus(vm); + break; + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } @@ -3661,6 +3666,8 @@ processGuestPanicEvent(virQEMUDriver *driver, VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); break; + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: + /* we need to keep resources locked */ case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } @@ -3678,6 +3685,7 @@ processGuestPanicEvent(virQEMUDriver *driver, case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } @@ -3704,6 +3712,7 @@ processGuestPanicEvent(virQEMUDriver *driver, case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } @@ -19591,13 +19600,36 @@ qemuDomainModifyLifecycleActionLive(virDomainObj *vm, case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: break; } break; - case VIR_DOMAIN_LIFECYCLE_POWEROFF: case VIR_DOMAIN_LIFECYCLE_CRASH: + if (vm->def->onCrash == action) + break; + + switch (vm->def->onCrash) { + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: + panic = QEMU_MONITOR_ACTION_PANIC_NONE; + break; + + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + panic = QEMU_MONITOR_ACTION_PANIC_PAUSE; + break; + + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } + break; + + case VIR_DOMAIN_LIFECYCLE_POWEROFF: case VIR_DOMAIN_LIFECYCLE_LAST: break; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 8389819ee4..b2506edce0 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8186,6 +8186,24 @@ qemuProcessSetupLifecycleActions(virDomainObj *vm, if (vm->def->onReboot == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY) reboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN; + switch (vm->def->onCrash) { + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE_RUNNING: + panic = QEMU_MONITOR_ACTION_PANIC_NONE; + break; + + case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART: + case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE: + case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY: + case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART: + panic = QEMU_MONITOR_ACTION_PANIC_PAUSE; + break; + + case VIR_DOMAIN_LIFECYCLE_ACTION_LAST: + break; + } + if (shutdown == QEMU_MONITOR_ACTION_SHUTDOWN_KEEP && reboot == QEMU_MONITOR_ACTION_REBOOT_KEEP && watchdog == QEMU_MONITOR_ACTION_WATCHDOG_KEEP && diff --git a/tests/qemuxmlconfdata/async-teardown.x86_64-latest.xml b/tests/qemuxmlconfdata/async-teardown.x86_64-latest.xml index e98308a9b1..1c7c80ae8a 100644 --- a/tests/qemuxmlconfdata/async-teardown.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/async-teardown.x86_64-latest.xml @@ -17,7 +17,7 @@ <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> + <on_crash>preserve-running</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='block' device='disk'> diff --git a/tests/qemuxmlconfdata/async-teardown.xml b/tests/qemuxmlconfdata/async-teardown.xml index 70c1eccc55..149b9ed16d 100644 --- a/tests/qemuxmlconfdata/async-teardown.xml +++ b/tests/qemuxmlconfdata/async-teardown.xml @@ -11,7 +11,7 @@ <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> - <on_crash>destroy</on_crash> + <on_crash>preserve-running</on_crash> <features> <async-teardown enabled='yes'/> </features> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index df0b257cbe..f9e426f4eb 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -3193,6 +3193,7 @@ mymain(void) DO_TEST_CAPS_LATEST("crypto-builtin"); + /* this test case also tests 'preserve-running' onCrash action */ DO_TEST_CAPS_LATEST("async-teardown"); DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown", "s390x"); DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-no-attrib", "s390x"); diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index aa4f2a7a48..0f177fb69a 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -6242,7 +6242,8 @@ VIR_ENUM_IMPL(virshDomainLifecycleAction, "rename-restart", "preserve", "coredump-destroy", - "coredump-restart"); + "coredump-restart", + "none"); static bool cmdSetLifecycleAction(vshControl *ctl, const vshCmd *cmd) -- 2.55.0
participants (2)
-
Ján Tomko -
Peter Krempa