On Wed, Jun 24, 2026 at 09:17:05 +0000, sandesh.patel--- via Devel wrote:
> From: Sandesh Patel <[email protected]>
> 
> Unlike x86 boolean CPU features, ARM CPU features are exposed by QEMU
> as multi-bit properties whose accepted values depend on the host; only
> a subset of the possible values are valid on any given host.
> 
> A pending QEMU patch series [1] introduces a new QMP command,
> 'query-arm-cpu-props-info', which returns, for each ARM CPU property,
> its type and the set of values supported on the host.
> 
> Add support to query feature supported values
> 
> [1] 
> https://lore.kernel.org/qemu-arm/[email protected]/
> 
> Signed-off-by: Sandesh Patel <[email protected]>
> ---

Couple points about capability changes:

>  src/qemu/qemu_capabilities.c                  | 13 +++
>  src/qemu/qemu_capabilities.h                  |  1 +
>  src/qemu/qemu_monitor.c                       | 51 +++++++++++
>  src/qemu/qemu_monitor.h                       | 26 ++++++
>  src/qemu/qemu_monitor_json.c                  | 66 ++++++++++++++
>  src/qemu/qemu_monitor_json.h                  |  5 +
>  .../caps_11.1.0_aarch64.replies               | 69 ++++++++++++++
>  .../caps_11.1.0_aarch64.xml                   |  1 +
>  tests/qemumonitorjsontest.c                   | 91 +++++++++++++++++++
>  9 files changed, 323 insertions(+)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index a28f87ad2b..cb933aa630 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -767,6 +767,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
>  
>                /* 495 */
>                "blockdev-mirror.target-is-zero", /* 
> QEMU_CAPS_BLOCKDEV_MIRROR_TARGET_IS_ZERO */
> +              "query-arm-cpu-props-info", /* 
> QEMU_CAPS_QUERY_ARM_CPU_PROPS_INFO */

Generally new capability goes in a separate patch to show what it
influences.


>      );
>  
>  
> @@ -812,6 +813,7 @@ struct _virQEMUCapsAccel {
>      virQEMUCapsMachineType *machineTypes;
>      virQEMUCapsHostCPUData hostCPU;
>      qemuMonitorCPUDefs *cpuModels;
> +    qemuMonitorCPUPropsInfoList *cpuProps; /* currently only populated on 
> ARM + KVM */
>  };
>  
>  

[...]

> diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies 
> b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
> index 41cd5496c6..40fd157680 100644
> --- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
> +++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.replies
> @@ -24932,6 +24932,40 @@
>          "in-use",
>          "auto"
>        ]
> +    },
> +    {
> +      "name": "query-arm-cpu-props-info",
> +      "ret-type": "[999]",
> +      "meta-type": "command",
> +      "arg-type": "0"
> +    },
> +    {
> +      "name": "[999]",
> +      "element-type": "999",
> +      "meta-type": "array"
> +    },
> +    {
> +      "name": "999",
> +      "members": [
> +        {
> +          "name": "name",
> +          "type": "str"
> +        },
> +        {
> +          "name": "type",
> +          "type": "str"
> +        },
> +        {
> +          "name": "supported-values",
> +          "type": "[str]"
> +        },
> +        {
> +          "name": "composite",
> +          "default": null,
> +          "type": "str"
> +        }
> +      ],
> +      "meta-type": "object"
>      }
>    ],
>    "id": "libvirt-4"
> @@ -37945,6 +37979,41 @@
>    }
>  }
>  
> +{
> +  "execute": "query-arm-cpu-props-info",
> +  "id": "libvirt-46"
> +}
> +
> +{
> +  "return": [
> +    {
> +      "name": "hw_prop_WRPs",
> +      "supported-values": [
> +        "0-3"
> +      ],
> +      "type": "number"
> +    },
> +    {
> +      "name": "hw_prop_API",
> +      "composite": "pauth",
> +      "supported-values": [
> +        "off"
> +      ],
> +      "type": "string"
> +    },
> +    {
> +      "name": "feat_RAS",
> +      "supported-values": [
> +        "0.0",
> +        "1.0",
> +        "1.1_base"
> +      ],
> +      "type": "string"
> +    }
> +  ],
> +  "id": "libvirt-46"
> +}
> +
>  {
>    "execute": "qmp_capabilities",
>    "id": "libvirt-1"

Changes to this file *must* be generated from a real qemu using the
dumping tool. Manual change like this are not acceptable.

Also changes to the capability dumps *must* be a separate patch.

The change will also only be accepted once the qemu code hits the
upstream repo. I'm taking care of re-generating this one so once the
corresponding code is upstream feel free to ping me to do a refresh.

In case the CPU I'm generating this on (a raspberry pi 5) doesn't
support what you need you can add another variant of the caps (see the
README in tests/qemucapabilitiesdata). In case you generate that on a
non-released qemu version you'll be also responsible to updating it once
qemu-11.1 is released. Further updates will happen only when you then
contribute another version of said variant once next qemu version is
released.

Reply via email to