qemu: add capability for guest-aware win-dmp availability

query-dump-guest-memory-capability reported win-dmp on any x86 machine,
whether or not the guest had published a Windows dump header. QEMU
commit 1c0e259c5a35 tied it to the guest's vmcoreinfo note, but left
the change invisible to introspection.

QEMU 11.1 marks the win-dmp member of DumpGuestMemoryFormat with an
'allowed-by-guest' feature. Detect it, so a caller picking a dump format
can tell whether a reported win-dmp says anything about the guest.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Denis V. Lunev authored and Daniel P. Berrangé committed 2026-09-02 18:29:16 +01:00
1 parent 27d2f39d9a
commit 8972619929
6 files changed
+9

No files matched your search

+2
View File
@@ -775,6 +775,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
/* 500 */
"arm-smmuv3.cmdqv", /* QEMU_CAPS_ARM_SMMUV3_CMDQV */
"iothread.poll-weight", /* QEMU_CAPS_IOTHREAD_POLL_WEIGHT */
"win-dmp.guest-aware", /* QEMU_CAPS_WIN_DMP_GUEST_AWARE */
);
@@ -1674,6 +1675,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
{ "chardev-add/arg-type/backend/+socket/data/reconnect-ms", QEMU_CAPS_CHARDEV_RECONNECT_MILISECONDS },
{ "chardev-add/arg-type/backend/+qemu-vdagent", QEMU_CAPS_CHARDEV_QEMU_VDAGENT },
{ "device_add/$json-cli-hotplug", QEMU_CAPS_DEVICE_JSON },
{ "dump-guest-memory/arg-type/format/^win-dmp/$allowed-by-guest", QEMU_CAPS_WIN_DMP_GUEST_AWARE },
{ "nbd-server-start/arg-type/tls-creds", QEMU_CAPS_NBD_TLS },
{ "netdev_add/arg-type/+stream", QEMU_CAPS_NETDEV_STREAM },
{ "netdev_add/arg-type/+stream/reconnect", QEMU_CAPS_NETDEV_STREAM_RECONNECT },
+1
View File
@@ -749,6 +749,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
/* 500 */
QEMU_CAPS_ARM_SMMUV3_CMDQV, /* arm-smmuv3.cmdqv */
QEMU_CAPS_IOTHREAD_POLL_WEIGHT, /* -object iothread.poll-weight */
QEMU_CAPS_WIN_DMP_GUEST_AWARE, /* 'win-dmp' is offered only to a guest that can use it */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
@@ -193,6 +193,7 @@
<flag name='arm-smmuv3.accel'/>
<flag name='arm-smmuv3.cmdqv'/>
<flag name='iothread.poll-weight'/>
<flag name='win-dmp.guest-aware'/>
<version>11001000</version>
<microcodeVersion>61700287</microcodeVersion>
<package>v11.1.0</package>
@@ -148,6 +148,7 @@
<flag name='blockdev-mirror.target-is-zero'/>
<flag name='object-monitor-qmp'/>
<flag name='iothread.poll-weight'/>
<flag name='win-dmp.guest-aware'/>
<version>11001000</version>
<microcodeVersion>39100287</microcodeVersion>
<package>v11.1.0</package>
@@ -223,6 +223,7 @@
<flag name='blockdev-mirror.target-is-zero'/>
<flag name='object-monitor-qmp'/>
<flag name='iothread.poll-weight'/>
<flag name='win-dmp.guest-aware'/>
<version>11001000</version>
<microcodeVersion>43100287</microcodeVersion>
<package>v11.1.0</package>
+3
View File
@@ -3116,6 +3116,8 @@ mymain(void)
DO_TEST_QAPI_QUERY("variant", "blockdev-add/arg-type/+file", 1, true);
DO_TEST_QAPI_QUERY("variant property", "blockdev-add/arg-type/+file/filename", 1, true);
DO_TEST_QAPI_QUERY("enum value", "query-status/ret-type/status/^debug", 1, false);
DO_TEST_QAPI_QUERY("enum value feature", "query-migrate-capabilities/ret-type/capability/^x-colo/$unstable", 1, false);
DO_TEST_QAPI_QUERY("enum value in command arguments", "dump-guest-memory/arg-type/format/^win-dmp", 1, false);
DO_TEST_QAPI_QUERY("builtin type", "query-qmp-schema/ret-type/name/!string", 1, false);
DO_TEST_QAPI_QUERY("alternate variant 1", "blockdev-add/arg-type/+qcow2/backing/!null", 1, false);
DO_TEST_QAPI_QUERY("alternate variant 2", "blockdev-add/arg-type/+qcow2/backing/!string", 1, false);
@@ -3125,6 +3127,7 @@ mymain(void)
DO_TEST_QAPI_QUERY("nonexistent attr", "screendump/arg-type/nonexistent", 0, false);
DO_TEST_QAPI_QUERY("nonexistent variant", "blockdev-add/arg-type/+nonexistent", 0, false);
DO_TEST_QAPI_QUERY("nonexistent enum value", "query-status/ret-type/status/^nonexistentdebug", 0, false);
DO_TEST_QAPI_QUERY("nonexistent enum value feature", "query-migrate-capabilities/ret-type/capability/^x-colo/$nonexistentfeature", 0, false);
DO_TEST_QAPI_QUERY("broken query for enum value", "query-status/ret-type/status/^debug/test", -1, false);
DO_TEST_QAPI_QUERY("builtin type", "query-qmp-schema/ret-type/name/!number", 0, false);