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 <[email protected]>
---
 src/qemu/qemu_capabilities.c                           | 4 ++++
 src/qemu/qemu_capabilities.h                           | 3 +++
 tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies | 5 ++++-
 tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml     | 1 +
 tests/qemucapabilitiesdata/caps_11.1.0_x86_64.replies  | 5 ++++-
 tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml      | 1 +
 tests/qemumonitorjsontest.c                            | 3 +++
 7 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 6abb179951..e8ccc286b0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -771,6 +771,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
               "arm-smmuv3", /* QEMU_CAPS_DEVICE_ARM_SMMUV3 */
               "arm-smmuv3.smmu_per_bus", /* QEMU_CAPS_ARM_SMMUV3_SMMU_PER_BUS 
*/
               "arm-smmuv3.accel", /* QEMU_CAPS_ARM_SMMUV3_ACCEL */
+
+              /* 500 */
+              "win-dmp.guest-aware", /* QEMU_CAPS_WIN_DMP_GUEST_AWARE */
     );
 
 
@@ -1669,6 +1672,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 },
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 4563e15156..9adbf964ce 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -746,6 +746,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for 
syntax-check */
     QEMU_CAPS_ARM_SMMUV3_SMMU_PER_BUS, /* arm-smmuv3.smmu_per_bus */
     QEMU_CAPS_ARM_SMMUV3_ACCEL, /* arm-smmuv3.accel */
 
+    /* 500 */
+    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;
 
diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies 
b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
index 921e667f27..45a26dce00 100644
--- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
+++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
@@ -12624,7 +12624,10 @@
           "name": "kdump-raw-snappy"
         },
         {
-          "name": "win-dmp"
+          "name": "win-dmp",
+          "features": [
+            "allowed-by-guest"
+          ]
         }
       ],
       "meta-type": "enum",
diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml 
b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml
index e53ad1d461..409757b5c5 100644
--- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml
@@ -191,6 +191,7 @@
   <flag name='arm-smmuv3'/>
   <flag name='arm-smmuv3.smmu_per_bus'/>
   <flag name='arm-smmuv3.accel'/>
+  <flag name='win-dmp.guest-aware'/>
   <version>11000090</version>
   <microcodeVersion>61700287</microcodeVersion>
   <package>v11.1.0-rc0</package>
diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.replies 
b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.replies
index 06be0418ca..a747db1236 100644
--- a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.replies
+++ b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.replies
@@ -12769,7 +12769,10 @@
           "name": "kdump-raw-snappy"
         },
         {
-          "name": "win-dmp"
+          "name": "win-dmp",
+          "features": [
+            "allowed-by-guest"
+          ]
         }
       ],
       "meta-type": "enum",
diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml 
b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml
index e32cedca2f..58dfaff779 100644
--- a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml
@@ -222,6 +222,7 @@
   <flag name='amd-iommu.xtsup'/>
   <flag name='blockdev-mirror.target-is-zero'/>
   <flag name='object-monitor-qmp'/>
+  <flag name='win-dmp.guest-aware'/>
   <version>11000090</version>
   <microcodeVersion>43100287</microcodeVersion>
   <package>v11.1.0-rc0</package>
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index f59b97c1c3..70f03afb81 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -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);
 
-- 
2.53.0

Reply via email to