From 0f2ee777b8ad0a0240b68bc4c4ae97b316936d59 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Wed, 19 Aug 2026 15:04:03 +0200 Subject: [PATCH] libvirt-11.10.0-18.el9 - qemu: Always assume support for 'QEMU_CAPS_SET_ACTION' (RHEL-242546) - qemu: Remove unused 'qemuProcessRebootAllowed' (RHEL-242546) - qemu: monitor: Remove support for 'watchdog-set-action' (RHEL-242546) - qemu: Remove 'allowReboot' field (RHEL-242546) - qemu: capabilities: Retire QEMU_CAPS_SET_ACTION (RHEL-242546) - qemuProcessSetupLifecycleActions: Prepare to handle other actions (RHEL-242546) - qemuDomainModifyLifecycleActionLive: Prepare to handle other actions (RHEL-242546) - processGuestPanicEvent: Don't pass panic action via parameter (RHEL-242546) - conf: Use proper enum types for 'onReboot', 'onPoweroff', 'onCrash', and 'onLockFailure' (RHEL-242546) - qemuMonitorGuestPanicEventInfoFormatMsg: Directly return message (RHEL-242546) - qemuProcessGuestPanicEventInfo: Fold into only caller (RHEL-242546) - qemu: processGuestPanicEvent: Split individual steps under separate conditions (RHEL-242546) - Add support for keeping VM running when panic notifier is used (RHEL-242546) - qemu: Fix proper ordering of 'virtlockd' shutdown (RHEL-180876) - Add guest device info to virDomainGetGuestInfo (RHEL-243300) - qemu_agent: Introduce guest-get-devices (RHEL-243300) - qemuagenttest: Introduce GetGuestDeviceInfo test case (RHEL-243300) - qemu: Implement device info for virDomainGetGuestInfo() API (RHEL-243300) - virsh: Add support for VIR_DOMAIN_GUEST_INFO_DEVICES (RHEL-243300) Resolves: RHEL-180876, RHEL-242546, RHEL-243300 --- ...device-info-to-virDomainGetGuestInfo.patch | 134 +++++ ...-running-when-panic-notifier-is-used.patch | 306 ++++++++++ ...onPoweroff-onCrash-and-onLockFailure.patch | 137 +++++ ...on-t-pass-panic-action-via-parameter.patch | 69 +++ ...ume-support-for-QEMU_CAPS_SET_ACTION.patch | 239 ++++++++ ...roper-ordering-of-virtlockd-shutdown.patch | 50 ++ ...e-info-for-virDomainGetGuestInfo-API.patch | 149 +++++ libvirt-qemu-Remove-allowReboot-field.patch | 313 +++++++++++ ...move-unused-qemuProcessRebootAllowed.patch | 63 +++ ...bilities-Retire-QEMU_CAPS_SET_ACTION.patch | 531 ++++++++++++++++++ ...move-support-for-watchdog-set-action.patch | 112 ++++ ...dual-steps-under-separate-conditions.patch | 127 +++++ ...Live-Prepare-to-handle-other-actions.patch | 103 ++++ ...nfoFormatMsg-Directly-return-message.patch | 88 +++ ...PanicEventInfo-Fold-into-only-caller.patch | 62 ++ ...ions-Prepare-to-handle-other-actions.patch | 62 ++ ...mu_agent-Introduce-guest-get-devices.patch | 198 +++++++ ...troduce-GetGuestDeviceInfo-test-case.patch | 164 ++++++ ...rt-for-VIR_DOMAIN_GUEST_INFO_DEVICES.patch | 88 +++ libvirt.spec | 42 +- 20 files changed, 3036 insertions(+), 1 deletion(-) create mode 100644 libvirt-Add-guest-device-info-to-virDomainGetGuestInfo.patch create mode 100644 libvirt-Add-support-for-keeping-VM-running-when-panic-notifier-is-used.patch create mode 100644 libvirt-conf-Use-proper-enum-types-for-onReboot-onPoweroff-onCrash-and-onLockFailure.patch create mode 100644 libvirt-processGuestPanicEvent-Don-t-pass-panic-action-via-parameter.patch create mode 100644 libvirt-qemu-Always-assume-support-for-QEMU_CAPS_SET_ACTION.patch create mode 100644 libvirt-qemu-Fix-proper-ordering-of-virtlockd-shutdown.patch create mode 100644 libvirt-qemu-Implement-device-info-for-virDomainGetGuestInfo-API.patch create mode 100644 libvirt-qemu-Remove-allowReboot-field.patch create mode 100644 libvirt-qemu-Remove-unused-qemuProcessRebootAllowed.patch create mode 100644 libvirt-qemu-capabilities-Retire-QEMU_CAPS_SET_ACTION.patch create mode 100644 libvirt-qemu-monitor-Remove-support-for-watchdog-set-action.patch create mode 100644 libvirt-qemu-processGuestPanicEvent-Split-individual-steps-under-separate-conditions.patch create mode 100644 libvirt-qemuDomainModifyLifecycleActionLive-Prepare-to-handle-other-actions.patch create mode 100644 libvirt-qemuMonitorGuestPanicEventInfoFormatMsg-Directly-return-message.patch create mode 100644 libvirt-qemuProcessGuestPanicEventInfo-Fold-into-only-caller.patch create mode 100644 libvirt-qemuProcessSetupLifecycleActions-Prepare-to-handle-other-actions.patch create mode 100644 libvirt-qemu_agent-Introduce-guest-get-devices.patch create mode 100644 libvirt-qemuagenttest-Introduce-GetGuestDeviceInfo-test-case.patch create mode 100644 libvirt-virsh-Add-support-for-VIR_DOMAIN_GUEST_INFO_DEVICES.patch diff --git a/libvirt-Add-guest-device-info-to-virDomainGetGuestInfo.patch b/libvirt-Add-guest-device-info-to-virDomainGetGuestInfo.patch new file mode 100644 index 0000000..caf0813 --- /dev/null +++ b/libvirt-Add-guest-device-info-to-virDomainGetGuestInfo.patch @@ -0,0 +1,134 @@ +From df1527ef32effff10b7901be3542811ed13498a7 Mon Sep 17 00:00:00 2001 +Message-ID: +From: Michal Privoznik +Date: Wed, 12 Aug 2026 15:11:12 +0200 +Subject: [PATCH] Add guest device info to virDomainGetGuestInfo + +QEMU guest agent has 'guest-get-devices` command, which returns +information on guest devices (driver name, version, release date, +and so on). In this commit the public API part is introduced. + +Signed-off-by: Michal Privoznik +Reviewed-by: Peter Krempa +(cherry picked from commit 3033dae6989083fde1d06427ee2840242cfd8dca) +Resolves: https://redhat.atlassian.net/browse/RHEL-243300 +Signed-off-by: Michal Privoznik +--- + include/libvirt/libvirt-domain.h | 78 ++++++++++++++++++++++++++++++++ + src/libvirt-domain.c | 5 ++ + 2 files changed, 83 insertions(+) + +diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h +index f469ed428d..b1c4b10f97 100644 +--- a/include/libvirt/libvirt-domain.h ++++ b/include/libvirt/libvirt-domain.h +@@ -8594,6 +8594,83 @@ int virDomainSetLaunchSecurityState(virDomainPtr domain, + */ + # define VIR_DOMAIN_GUEST_INFO_LOAD_15M "load.15m" + ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_COUNT: ++ * ++ * The number of guest devices that detailed information is fetched for as ++ * unsigned int. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_COUNT "device.count" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX: ++ * ++ * The parameter name prefix to access each device entry. Concatenate the ++ * prefix, the entry number formatted as an unsigned integer and one of the ++ * device suffix parameters to form a complete parameter name. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_PREFIX "device." ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_NAME: ++ * ++ * Name of the device driver (e.g. ``VirtIO Balloon Driver``) as a string. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_NAME ".driverName" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_DATE: ++ * ++ * Driver release date in seconds since the epoch (e.g. 1736726400) as long long. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_DATE ".driverDate" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_VERSION: ++ * ++ * Driver version (e.g. ``100.100.104.27100``) as a string. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_DRIVER_VERSION ".driverVersion" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE: ++ * ++ * Device identification (e.g. ``pci``) as a string. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE ".idType" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_VENDOR: ++ * ++ * PCI device (a device with VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE equal ++ * to ``pci``) vendor id (e.g. 6900) as a unsigned int. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_VENDOR ".pciVendor" ++ ++/** ++ * VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_DEVICE: ++ * ++ * PCI device (a device with VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_ID_TYPE equal ++ * to ``pci``) device id (e.g. 4165) as a unsigned int. ++ * ++ * Since: 12.7.0 ++ */ ++# define VIR_DOMAIN_GUEST_INFO_DEVICE_SUFFIX_PCI_DEVICE ".pciDevice" ++ + /** + * virDomainGuestInfoTypes: + * +@@ -8608,6 +8685,7 @@ typedef enum { + VIR_DOMAIN_GUEST_INFO_DISKS = (1 << 5), /* return disks information (Since: 7.0.0) */ + VIR_DOMAIN_GUEST_INFO_INTERFACES = (1 << 6), /* return interfaces information (Since: 7.10.0) */ + VIR_DOMAIN_GUEST_INFO_LOAD = (1 << 7), /* return load averages (Since: 11.2.0) */ ++ VIR_DOMAIN_GUEST_INFO_DEVICES = (1 << 8), /* return devices information (Since: 12.7.0) */ + } virDomainGuestInfoTypes; + + int virDomainGetGuestInfo(virDomainPtr domain, +diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c +index 0ae48654df..1dc9468968 100644 +--- a/src/libvirt-domain.c ++++ b/src/libvirt-domain.c +@@ -13226,6 +13226,11 @@ virDomainSetVcpu(virDomainPtr domain, + * The VIR_DOMAIN_GUEST_INFO_LOAD_* constants define the known typed parameter + * keys. + * ++ * VIR_DOMAIN_GUEST_INFO_DEVICES: ++ * Returns information on guest devices. ++ * The VIR_DOMAIN_GUEST_INFO_DEVICE_* constants define the known typed ++ * parameter keys. ++ * + * Using 0 for @types returns all information groups supported by the given + * hypervisor. + * +-- +2.55.0 diff --git a/libvirt-Add-support-for-keeping-VM-running-when-panic-notifier-is-used.patch b/libvirt-Add-support-for-keeping-VM-running-when-panic-notifier-is-used.patch new file mode 100644 index 0000000..be728a5 --- /dev/null +++ b/libvirt-Add-support-for-keeping-VM-running-when-panic-notifier-is-used.patch @@ -0,0 +1,306 @@ +From 64e5603f8ea139cd8b7c61b643a0a02bba5885c3 Mon Sep 17 00:00:00 2001 +Message-ID: <64e5603f8ea139cd8b7c61b643a0a02bba5885c3.1787144643.git.jdenemar@redhat.com> +From: Peter Krempa +Date: Wed, 22 Jul 2026 17:13:15 +0200 +Subject: [PATCH] Add support for keeping VM running when panic notifier is + used +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 +(cherry picked from commit cdea89dd87a10cd94deb3b067bae483d98c558ed) + +https://redhat.atlassian.net/browse/RHEL-242546 +--- + 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 8e7577f3b7..b48254f35b 100644 +--- a/docs/formatdomain.rst ++++ b/docs/formatdomain.rst +@@ -1998,6 +1998,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 4d7c0099ef..f469ed428d 100644 +--- a/include/libvirt/libvirt-domain.h ++++ b/include/libvirt/libvirt-domain.h +@@ -7955,6 +7955,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 7097ff7065..048aaa10a6 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -302,6 +302,7 @@ VIR_ENUM_IMPL(virDomainLifecycleAction, + "preserve", + "coredump-destroy", + "coredump-restart", ++ "preserve-running", + ); + + VIR_ENUM_IMPL(virDomainLockFailure, +@@ -5483,6 +5484,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 b8283f129e..f091c87702 100644 +--- a/src/conf/schemas/domaincommon.rng ++++ b/src/conf/schemas/domaincommon.rng +@@ -4973,6 +4973,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 +@@ -4989,6 +4990,7 @@ + rename-restart + coredump-destroy + coredump-restart ++ preserve-running + + +