Linux KVM/arm64 development list
 help / color / mirror / Atom feed
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.

[...]


  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