From: Eric Auger <eric.auger@redhat.com>
To: Shameer Kolothum Thodi <skolothumtho@nvidia.com>,
"eric.auger.pro@gmail.com" <eric.auger.pro@gmail.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"qemu-arm@nongnu.org" <qemu-arm@nongnu.org>,
"kvmarm@lists.linux.dev" <kvmarm@lists.linux.dev>,
"peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"richard.henderson@linaro.org" <richard.henderson@linaro.org>,
"cohuck@redhat.com" <cohuck@redhat.com>,
"sebott@redhat.com" <sebott@redhat.com>,
"philmd@linaro.org" <philmd@linaro.org>,
yangjinqian1@huawei.com
Cc: "maz@kernel.org" <maz@kernel.org>,
"oliver.upton@linux.dev" <oliver.upton@linux.dev>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"armbru@redhat.com" <armbru@redhat.com>,
"berrange@redhat.com" <berrange@redhat.com>,
"abologna@redhat.com" <abologna@redhat.com>,
"jdenemar@redhat.com" <jdenemar@redhat.com>
Subject: Re: [PATCH v4 11/17] arm/kvm: write back modified ID regs to KVM
Date: Tue, 19 May 2026 08:45:03 +0200 [thread overview]
Message-ID: <4e056a04-56e2-43ea-ba62-a2953efff080@redhat.com> (raw)
In-Reply-To: <IA0PR12MB75555B2C69AC473011333C72AB3D2@IA0PR12MB7555.namprd12.prod.outlook.com>
On 5/8/26 3:03 PM, Shameer Kolothum Thodi wrote:
> Hi Eric,
>
>> -----Original Message-----
>> From: Eric Auger <eric.auger@redhat.com>
>> Sent: 03 May 2026 08:34
>> To: eric.auger.pro@gmail.com; eric.auger@redhat.com; qemu-
>> devel@nongnu.org; qemu-arm@nongnu.org; kvmarm@lists.linux.dev;
>> peter.maydell@linaro.org; richard.henderson@linaro.org;
>> cohuck@redhat.com; sebott@redhat.com; Shameer Kolothum Thodi
>> <skolothumtho@nvidia.com>; philmd@linaro.org
>> Cc: maz@kernel.org; oliver.upton@linux.dev; pbonzini@redhat.com;
>> armbru@redhat.com; berrange@redhat.com; abologna@redhat.com;
>> jdenemar@redhat.com
>> Subject: [PATCH v4 11/17] arm/kvm: write back modified ID regs to KVM
>>
>> External email: Use caution opening links or attachments
>>
>>
>> We want to give a chance to override the value of host ID regs.
>> In a previous patch we made sure all their values could be fetched
>> through kvm_get_one_reg() calls before their modification. After
>> their potential modification we need to make sure we write back
>> the values through kvm_set_one_reg() calls.
>>
>> Make sure the cpreg_list is modified with updated values and
>> transfer those values back to kvm.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
>> ---
>> target/arm/kvm.c | 59
>> ++++++++++++++++++++++++++++++++++++++++-
>> target/arm/trace-events | 1 +
>> 2 files changed, 59 insertions(+), 1 deletion(-)
>>
>> diff --git a/target/arm/kvm.c b/target/arm/kvm.c
>> index 1a9b91bf8a..ca9a7d9439 100644
>> --- a/target/arm/kvm.c
>> +++ b/target/arm/kvm.c
>> @@ -275,6 +275,21 @@ static uint32_t kvm_arm_sve_get_vls(int fd)
>> return vls[0] & MAKE_64BIT_MASK(0, ARM_MAX_VQ);
>> }
>>
>> +static int kvm_feature_idx_to_idregs_idx(int kidx)
>> +{
>> + int op1, crm, op2;
>> + ARMSysRegs sysreg;
>> +
>> + op1 = kidx / 64;
>> + if (op1 == 2) {
>> + op1 = 3;
>> + }
>> + crm = (kidx % 64) / 8;
>> + op2 = kidx % 8;
>> + sysreg = ENCODE_ID_REG(3, op1, 0, crm, op2);
>> + return get_sysreg_idx(sysreg);
>> +}
>> +
>> static int idregs_idx_to_kvm_feature_idx(ARMIDRegisterIdx idx)
>> {
>> ARMSysRegs sysreg = id_register_sysreg[idx];
>> @@ -1197,6 +1212,39 @@ bool kvm_arm_cpu_post_load(ARMCPU *cpu)
>> return true;
>> }
>>
>> +static void kvm_arm_writable_idregs_to_cpreg_list(ARMCPU *cpu)
>> +{
>> + if (!cpu->writable_map) {
>> + return;
>> + }
>> + for (int i = 0; i < NR_ID_REG_MASKS; i++) {
>> + uint64_t writable_mask = cpu->writable_map->regs[i];
>> + uint64_t *cpreg;
>> +
>> + if (writable_mask) {
>> + uint64_t previous, new;
>> + int idx = kvm_feature_idx_to_idregs_idx(i);
>> + ARM64SysReg *sysregdesc;
>> + uint32_t sysreg;
>> +
>> + if (idx == -1) {
>> + /* sysreg writable, but we don't know it */
>> + continue;
>> + }
>> + sysregdesc = &arm64_id_regs[idx];
>> + sysreg = sysregdesc->sysreg;
>> + cpreg = kvm_arm_get_cpreg_ptr(cpu,
>> idregs_sysreg_to_kvm_reg(sysreg));
>> + previous = *cpreg;
>> + new = cpu->isar.idregs[idx];
>> + if (previous != new) {
>> + *cpreg = new;
>> + trace_kvm_arm_writable_idregs_to_cpreg_list(sysregdesc->name,
>> + previous, new);
>> + }
>> + }
>> + }
>> +}
>> +
>> void kvm_arm_reset_vcpu(ARMCPU *cpu)
>> {
>> int ret;
>> @@ -2148,7 +2196,16 @@ int kvm_arch_init_vcpu(CPUState *cs)
>> }
>> cpu->mp_affinity = mpidr & ARM64_AFFINITY_MASK;
>>
>> - return kvm_arm_init_cpreg_list(cpu);
>> + ret = kvm_arm_init_cpreg_list(cpu);
>> + if (ret) {
>> + return ret;
>> + }
>> + /* overwrite writable ID regs with their updated property values */
>> + kvm_arm_writable_idregs_to_cpreg_list(cpu);
>> +
>> + write_list_to_kvmstate(cpu, KVM_PUT_FULL_STATE);
> KVM may hide registers based on ID register fields when features
> are disabled. Updating writable ID registers after KVM_GET_REG_LIST
> can result in a mismatched register list and failures when setting
> registers.
>
> This was reported on v3:
> https://lore.kernel.org/qemu-devel/ae3f4d26-7a1a-418c-b303-2ed1d9ced4ba@huawei.com/
Effectively I failed to address Jinqian's comment. This should be fixed
in next respin
Thanks to both of you!
Eric
>
> Is this fixed someway in this series? I am not sure. I have faced the
> same issue on NV platforms as well.
>
> Thanks,
> Shameer
>
next prev parent reply other threads:[~2026-05-19 6:45 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-03 7:33 [PATCH v4 00/17] kvm/arm: Introduce a customizable aarch64 KVM host model Eric Auger
2026-05-03 7:33 ` [PATCH v4 01/17] scripts: introduce scripts/update-aarch64-cpu-sysregs-header.py Eric Auger
2026-05-03 7:33 ` [PATCH v4 02/17] target/arm/cpu-sysregs.h.inc: Sort by name alphabetical order Eric Auger
2026-05-06 16:10 ` Shameer Kolothum Thodi
2026-05-12 6:24 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 03/17] target/arm/cpu-sysregs.h.inc: Update with automatic generation Eric Auger
2026-05-07 8:45 ` Shameer Kolothum Thodi
2026-05-12 6:38 ` Eric Auger
2026-05-12 9:41 ` Shameer Kolothum Thodi
2026-05-12 14:11 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 04/17] arm/cpu: Add infra to handle generated ID register definitions Eric Auger
2026-05-07 8:58 ` Shameer Kolothum Thodi
2026-05-12 14:52 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 05/17] scripts: Introduce scripts/aarch64_sysreg_helpers module Eric Auger
2026-05-03 7:33 ` [PATCH v4 06/17] scripts: Introduce scripts/update-aarch64-cpu-sysreg-properties.py Eric Auger
2026-05-03 7:33 ` [PATCH v4 07/17] target/arm/cpu-sysreg-properties.c: Generate code with new script Eric Auger
2026-05-03 7:33 ` [PATCH v4 08/17] target/arm/kvm: Introduce kvm_get_writable_id_regs Eric Auger
2026-05-07 10:07 ` Shameer Kolothum Thodi
2026-05-12 15:12 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 09/17] arm/cpu: accessors for writable id registers Eric Auger
2026-05-07 10:32 ` Shameer Kolothum Thodi
2026-05-12 15:33 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 10/17] arm/kvm: Allow reading all the writable ID registers Eric Auger
2026-05-07 11:50 ` Shameer Kolothum Thodi
2026-05-03 7:33 ` [PATCH v4 11/17] arm/kvm: write back modified ID regs to KVM Eric Auger
2026-05-07 18:53 ` Shameer Kolothum Thodi
2026-05-08 13:03 ` Shameer Kolothum Thodi
2026-05-19 6:45 ` Eric Auger [this message]
2026-05-03 7:33 ` [PATCH v4 12/17] target/arm/kvm: Introduce kvm_arm_expose_idreg_properties Eric Auger
2026-05-07 19:10 ` Shameer Kolothum Thodi
2026-05-18 15:09 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 13/17] target/arm/kvm: Special case REVIDR_EL1 and AIDR_EL1 Eric Auger
2026-05-03 7:33 ` [PATCH v4 14/17] target/arm/kvm: Special case ID_AA64ISAR0_EL1 RES0 [24, 27] bits Eric Auger
2026-05-03 7:33 ` [PATCH v4 15/17] arm/cpu: Expose writable ID reg field properties on the kvm host vcpu model Eric Auger
2026-05-07 19:22 ` Shameer Kolothum Thodi
2026-05-18 15:21 ` Eric Auger
2026-05-03 7:33 ` [PATCH v4 16/17] arm-qmp-cmds: introspection for ID register props Eric Auger
2026-05-03 7:33 ` [PATCH v4 17/17] arm/cpu-features: document ID reg properties Eric Auger
2026-05-07 19:44 ` Shameer Kolothum Thodi
2026-05-18 15:27 ` Eric Auger
2026-05-15 8:31 ` [PATCH v4 00/17] kvm/arm: Introduce a customizable aarch64 KVM host model Peter Maydell
2026-05-15 9:04 ` Marc Zyngier
2026-05-15 16:41 ` 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=4e056a04-56e2-43ea-ba62-a2953efff080@redhat.com \
--to=eric.auger@redhat.com \
--cc=abologna@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=cohuck@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=jdenemar@redhat.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@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sebott@redhat.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