From: Peter Krempa Date: Wed, 22 Jul 2026 15:13:15 +0000 (+0200) Subject: Add support for keeping VM running when panic notifier is used X-Git-Tag: v12.6.0-rc1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cdea89dd87a10cd94deb3b067bae483d98c558ed;p=thirdparty%2Flibvirt.git Add support for keeping VM running when panic notifier is used 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 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 Reviewed-by: Ján Tomko --- 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 `__ 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 @@ rename-restart coredump-destroy coredump-restart + preserve-running