From: Markus Armbruster <armbru@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>,
eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
qemu-arm@nongnu.org, kvmarm@lists.linux.dev,
peter.maydell@linaro.org, shaju.abraham@nutanix.com,
khushit.shah@nutanix.com, yangjinqian1@huawei.com,
cohuck@redhat.com, richard.henderson@linaro.org,
sebott@redhat.com, skolothumtho@nvidia.com,
philmd@oss.qualcomm.com, maz@kernel.org,
oliver.upton@linux.dev, pbonzini@redhat.com,
berrange@redhat.com, abologna@redhat.com, jdenemar@redhat.com
Subject: Re: [RFC PATCH v7 18/18] arm-qmp-cmds: introspection for ID register props
Date: Tue, 25 Aug 2026 11:20:20 +0200 [thread overview]
Message-ID: <87wltemu97.fsf@pond.sub.org> (raw)
In-Reply-To: <cae6f5c2-edb2-4811-a915-cbd93bbd903b@redhat.com> (Eric Auger's message of "Tue, 25 Aug 2026 10:38:22 +0200")
Eric Auger <eric.auger@redhat.com> writes:
> Hi Markus,
>
> On 8/20/26 1:50 PM, Markus Armbruster wrote:
>> Eric Auger <eric.auger@redhat.com> writes:
>>
>>> From: Cornelia Huck <cohuck@redhat.com>
>>>
>>> Implement the capability to query available ID register values by
>>> adding SYSREG_* options and values to the cpu model expansion for the
>>> host model, if available.
>>>
>>> Excerpt:
>>> (QEMU) query-cpu-model-expansion type=full model={"name":"host"}
>>
>> Is this qmp-shell?
> yes it is. Is that a problem?
I wouldn't call use of qmp-shell a problem. Except some reader may not
recognize it from the example input, or may not even know it exists.
Mentioning it takes care of all that.
I prefer to use QMP directly myself, like this:
$ socat "READLINE,history=$HOME/.qmp_history,prompt=QMP> " UNIX-CONNECT:/path/to/socket
But that's just personal preference.
>>> {"return": {"model": {"name": "host", "props": {"SYSREG_ID_AA64PFR0_EL1_EL3": 1,
>>> "SYSREG_ID_AA64ISAR2_EL1_CLRBHB": 0, "SYSREG_CTR_EL0_L1Ip": 3,
>>> "SYSREG_MIDR_EL1_PartNum": 3407, "SYSREG_CTR_EL0_DminLine": 4,
>>> "SYSREG_ID_AA64MMFR0_EL1_PARange": 5, "SYSREG_ID_AA64MMFR1_EL1_ECBHB": 0
>>> ../..
>>>
>>> This allows the upper stack to detect available writable ID regs and
>>> the "host passthrough model" values.
>>>
>>> It also allows to test some ID reg field values:
>>> (QEMU) query-cpu-model-expansion type=full model={"name":"host","props":{"SYSREG_ID_AA64ISAR0_EL1_DP":0x13}}
>>> {"error": {"class": "GenericError", "desc": "idreg SYSREG_ID_AA64ISAR0_EL1_DP set value (0x13) exceeds length of field (4)!"}}
>>>
>>> (QEMU) query-cpu-model-expansion type=full model={"name":"host","props":{"SYSREG_ID_AA64ISAR0_EL1_DP":0x2}}
>>> {"error": {"class": "GenericError", "desc": "idreg SYSREG_ID_AA64ISAR0_EL1_DP set value (0x2) does not match any arch valid enum value!"}}
>>
>> The examples use CPU "host". Inconvenient for me, because I run into
>> "The CPU type 'host' requires KVM" when I try to play with them myself.
>> If you don't actually need "host" here, consider using something that
>> works more widely, just to help reviewers.
> It only applies to the host model, that's the reason. Extending this to
> TCG models is theorerically feasible but would induce huge changes
> without much benefits I think. With TCG you already have named vcpu
> models you can migrate as is. The purpose of this series is to allow
> tweaking the host passthrough model to allow migration between
> differents hosts.
Thanks!
>>> The following checks are performed:
>>> - the value does not exceed the field size
>>> - if the field is associated to enum values, the set value must be one
>>> of those enum values
>>> - the value is applied against a scratch vcpu making sure the setting is
>>> not rejected for this host
>>>
>>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
>>>
>>> ---
>>>
>>> v5 -> v6:
>>> - add the write capability
>>> ---
>>> target/arm/arm-qmp-cmds.c | 98 +++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 98 insertions(+)
>>>
>>> diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c
>>> index 83ec95c290..41fefadcea 100644
>>> --- a/target/arm/arm-qmp-cmds.c
>>> +++ b/target/arm/arm-qmp-cmds.c
>>> @@ -21,6 +21,7 @@
>>> */
>>>
>>> #include "qemu/osdep.h"
>>> +#include "qemu/error-report.h"
>>> #include "qemu/target-info.h"
>>> #include "hw/core/boards.h"
>>> #include "kvm_arm.h"
>>> @@ -30,7 +31,10 @@
>>> #include "qapi/qapi-commands-machine.h"
>>> #include "qapi/qapi-commands-misc-arm.h"
>>> #include "qobject/qdict.h"
>>> +#include "qobject/qnum.h"
>>> #include "qom/qom-qobject.h"
>>> +#include <linux/kvm.h>
>>> +#include "system/kvm.h"
>>> #include "cpu.h"
>>>
>>> static GICCapability *gic_cap_new(int version)
>>> @@ -84,11 +88,14 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
>>> Error **errp)
>>> {
>>> CpuModelExpansionInfo *expansion_info;
>>> + ObjectPropertyIterator iter;
>>> const QDict *qdict_in;
>>> + ObjectProperty *idregprop;
>>> QDict *qdict_out;
>>> ObjectClass *oc;
>>> Object *obj;
>>> const char *name;
>>> + int fdarray[3];
>>> int i;
>>>
>>> if (type != CPU_MODEL_EXPANSION_TYPE_FULL) {
>>> @@ -133,6 +140,38 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
>>>
>>> obj = object_new(object_class_get_name(oc));
>>>
>>> + if (kvm_enabled()) {
>>> + bool pmuv3_supported = kvm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3);
>>> + bool sve_supported = kvm_check_extension(kvm_state, KVM_CAP_ARM_SVE);
>>> + struct kvm_vcpu_init init = { .target = -1, };
>>> + bool el2_supported = kvm_arm_el2_supported();
>>> + bool pauth_supported;
>>> + int ret;
>>> +
>>> + pauth_supported = kvm_check_extension(kvm_state, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
>>> + kvm_check_extension(kvm_state, KVM_CAP_ARM_PTRAUTH_GENERIC);
>>> +
>>> + if (sve_supported) {
>>> + init.features[0] |= 1 << KVM_ARM_VCPU_SVE;
>>> + }
>>> + if (el2_supported) {
>>> + init.features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2;
>>> + }
>>> + if (pauth_supported) {
>>> + init.features[0] |= (1 << KVM_ARM_VCPU_PTRAUTH_ADDRESS |
>>> + 1 << KVM_ARM_VCPU_PTRAUTH_GENERIC);
>>> + }
>>> + if (pmuv3_supported) {
>>> + init.features[0] |= 1 << KVM_ARM_VCPU_PMU_V3;
>>> + }
>>> +
>>> + ret = kvm_arm_create_scratch_host_vcpu(fdarray, &init);
>>> + if (!ret) {
>>> + error_setg(errp, "failing creating a scratch vcpu");
>>
>> This error message feels off. I'd use something like "can't create
>> FOO". Still bad, because it provides no clue on why. What are the
>> possible failure modes?
> OK. There are quite a lot of possible failures which are handled in
> kvm_arm_create_scratch_host_vcpu()
> opening of /dev/kvm, KVM_CREATE_VM, KVM_CREATE_VCPU,
> KVM_ARM_PREFERRED_TARGET, KVM_ARM_VCPU_INIT.
> In next version I will add an Error handle to
> kvm_arm_create_scratch_host_vcpu() so that precise error message gets
> returned.
Makes sense.
[...]
next prev parent reply other threads:[~2026-08-25 9:20 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-26 15:29 [RFC PATCH v7 00/18] kvm/arm: Introduce a customizable aarch64 KVM host model Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 01/18] scripts: introduce scripts/update-aarch64-cpu-sysregs-header.py Eric Auger
2026-08-20 6:31 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 02/18] target/arm/cpu-sysregs.h.inc: Sort by name alphabetical order Eric Auger
2026-08-20 6:32 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 03/18] target/arm/cpu-sysregs.h.inc: Update with automatic generation Eric Auger
2026-08-20 6:55 ` Khushit Shah
2026-08-26 6:45 ` Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 04/18] arm/cpu: Add infra to handle generated ID register definitions Eric Auger
2026-08-20 6:35 ` Khushit Shah
2026-08-25 14:08 ` Eric Auger
2026-08-20 6:39 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 05/18] scripts: Introduce scripts/aarch64_sysreg_helpers module Eric Auger
2026-08-20 7:09 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 06/18] scripts: Introduce scripts/update-aarch64-cpu-sysreg-properties.py Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 07/18] target/arm/cpu-idregs.h.inc: generate with script Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 08/18] target/arm/cpu-idregs.h.inc: Generate enum values Eric Auger
2026-08-20 9:02 ` Khushit Shah
2026-08-25 15:02 ` Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 09/18] target/arm/cpu_idregs: generate tables for Arm64 ID registers and fields Eric Auger
2026-08-20 9:06 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 10/18] target/arm/kvm: Retrieve writable ID reg map Eric Auger
2026-08-06 4:52 ` Khushit Shah
2026-08-11 8:10 ` Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 11/18] arm/kvm: Initialize all writable ID registers from host Eric Auger
2026-08-20 9:49 ` Khushit Shah
2026-07-26 15:29 ` [RFC PATCH v7 12/18] target/arm/kvm: Introduce kvm_arm_expose_idreg_properties Eric Auger
2026-08-20 11:49 ` Markus Armbruster
2026-08-24 17:21 ` Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 13/18] target/arm/cpu: Expose writable ID reg field properties on the kvm host vcpu model Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 14/18] target/arm/cpu-idregs.h.inc: Generate reserved fields Eric Auger
2026-08-24 6:55 ` Khushit Shah
2026-08-25 15:34 ` Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 15/18] target/arm/kvm: Ignore and trace unexpected writable " Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 16/18] arm/cpu-features: document ID reg properties Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 17/18] target/arm/kvm: add utility to write idregs in scratch vcpu Eric Auger
2026-07-26 15:29 ` [RFC PATCH v7 18/18] arm-qmp-cmds: introspection for ID register props Eric Auger
2026-08-20 11:50 ` Markus Armbruster
2026-08-25 8:38 ` Eric Auger
2026-08-25 9:20 ` Markus Armbruster [this message]
2026-08-25 14:12 ` Eric Auger
2026-08-24 11:59 ` Khushit Shah
2026-08-26 6:50 ` Eric Auger
2026-08-26 11:27 ` Khushit Shah
2026-08-26 12:08 ` Eric Auger
2026-08-26 16:47 ` Eric Auger
2026-08-27 5:30 ` Khushit Shah
2026-08-27 7:18 ` Eric Auger
2026-08-20 6:27 ` [RFC PATCH v7 00/18] kvm/arm: Introduce a customizable aarch64 KVM host model Khushit Shah
2026-08-24 8:19 ` Khushit Shah
2026-08-24 8:47 ` Eric Auger
2026-08-24 13:26 ` Khushit Shah
2026-08-25 6:35 ` Eric Auger
2026-08-25 6:49 ` Khushit Shah
2026-08-25 8:42 ` Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wltemu97.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=abologna@redhat.com \
--cc=berrange@redhat.com \
--cc=cohuck@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=jdenemar@redhat.com \
--cc=khushit.shah@nutanix.com \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@oss.qualcomm.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sebott@redhat.com \
--cc=shaju.abraham@nutanix.com \
--cc=skolothumtho@nvidia.com \
--cc=yangjinqian1@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox