On 10/29/2025 6:19 AM, Daniel P. Berrangé wrote:
On Thu, Oct 23, 2025 at 04:27:36PM -0500, Praveen K Paladugu wrote:
From: Praveen K Paladugu <[email protected]>

qemu recently introduced `query-accelerators` command to generically query the
list of supported accelerators. Below is an example QMP invocation in qemu:

  { "execute": "query-accelerators"}
  {"return": {"enabled": "kvm", "present": ["kvm", "mshv", "qtest", "tcg", 
"xen"]}}

"enabled" here indicates "kvm" is enabled and present.

If query-accelerators command is available, use it. If not, fallback to
existing query-kvm command.

Signed-off-by: Praveen K Paladugu <[email protected]>
---
  src/qemu/qemu_capabilities.c                  |    35 +-
  src/qemu/qemu_capabilities.h                  |     1 +
  src/qemu/qemu_monitor.c                       |    12 +
  src/qemu/qemu_monitor.h                       |     5 +
  src/qemu/qemu_monitor_json.c                  |    35 +
  src/qemu/qemu_monitor_json.h                  |     6 +
  .../qemu_10.1.50-q35.x86_64.xml               |  1795 +
  .../qemu_10.1.50-tcg.x86_64.xml               |  1827 +
  tests/domaincapsdata/qemu_10.1.50.x86_64.xml  |  1795 +
  .../caps_10.1.50_x86_64.replies               | 46770 ++++++++++++++++
  .../caps_10.1.50_x86_64.xml                   |  4950 ++
  11 files changed, 57228 insertions(+), 3 deletions(-)
  create mode 100644 tests/domaincapsdata/qemu_10.1.50-q35.x86_64.xml
  create mode 100644 tests/domaincapsdata/qemu_10.1.50-tcg.x86_64.xml
  create mode 100644 tests/domaincapsdata/qemu_10.1.50.x86_64.xml
  create mode 100644 tests/qemucapabilitiesdata/caps_10.1.50_x86_64.replies
  create mode 100644 tests/qemucapabilitiesdata/caps_10.1.50_x86_64.xml

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 83946123be..98d2270d94 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -746,6 +746,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
/* 485 */
                "acpi-generic-initiator", /* QEMU_CAPS_ACPI_GENERIC_INITIATOR */
+              "query-accelerators", /* QEMU_CAPS_QUERY_ACCELERATORS */
      );
@@ -1261,6 +1262,7 @@ struct virQEMUCapsStringFlags virQEMUCapsCommands[] = {
      { "display-reload", QEMU_CAPS_DISPLAY_RELOAD },
      { "blockdev-set-active", QEMU_CAPS_BLOCKDEV_SET_ACTIVE },
      { "qom-list-get", QEMU_CAPS_QOM_LIST_GET },
+    { "query-accelerators", QEMU_CAPS_QUERY_ACCELERATORS },
  };
struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
@@ -3460,6 +3462,28 @@ virQEMUCapsProbeQMPKVMState(virQEMUCaps *qemuCaps,
      return 0;
  }
+static int
+virQEMUCapsProbeAccels(virQEMUCaps *qemuCaps,
+                       qemuMonitor *mon)
+{
+    g_autofree char *enabled = NULL;
+    g_auto(GStrv) present = NULL;
+
+    if (qemuMonitorGetAccelerators(mon, &enabled, &present) < 0)
+        return -1;
+
+    if (!enabled) {
+        return 0;
+    }
+
+    if (STREQ(enabled, "tcg"))
+        virQEMUCapsSet(qemuCaps, QEMU_CAPS_TCG);
+    else if (STREQ(enabled, "kvm"))
+        virQEMUCapsSet(qemuCaps, QEMU_CAPS_KVM);

        .... "hvf" ....

+
+    return 0;
+}
+
  #ifdef __APPLE__
  bool
  virQEMUCapsProbeHVF(virQEMUCaps *qemuCaps)
@@ -5777,9 +5801,14 @@ virQEMUCapsInitQMPMonitor(virQEMUCaps *qemuCaps,
      if (virQEMUCapsProbeQMPSchemaCapabilities(qemuCaps, mon) < 0)
          return -1;
- /* Some capabilities may differ depending on KVM state */
-    if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0)
-        return -1;
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_ACCELERATORS)) {
+        if (virQEMUCapsProbeAccels(qemuCaps, mon) < 0)
+            return -1;
+    } else {
+        /* Some capabilities may differ depending on KVM state */
+        if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0)
+            return -1;
+    }
if (virQEMUCapsProbeHVF(qemuCaps))
          virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF);

This should be folded into the } else { branch above. We previously
had to query the OS directly, but now we can ask QEMU itself, which
is better as we can now guarantee that QEMU actually has HVF support
built.


Thanks for the review Daniel. I addressed this feedback and pushed a v2 for this patch.

With regards,
Daniel

--
Regards,
Praveen K Paladugu

Reply via email to