From: Marc Zyngier <maz@kernel.org>
To: Steffen Eiden <seiden@linux.ibm.com>
Cc: kvm@vger.kernel.org, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
Alexander Gordeev <agordeev@linux.ibm.com>,
Andreas Grapentin <gra@linux.ibm.com>,
Arnd Bergmann <arnd@arndb.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
David Hildenbrand <david@kernel.org>,
Friedrich Welter <fritz@linux.ibm.com>,
Gautam Gala <ggala@linux.ibm.com>,
Hariharan Mari <hari55@linux.ibm.com>,
Heiko Carstens <hca@linux.ibm.com>,
Hendrik Brueckner <brueckner@linux.ibm.com>,
Ilya Leoshkevich <iii@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Joey Gouly <joey.gouly@arm.com>, Nico Boehr <nrb@linux.ibm.com>,
Nina Schoetterl-Glausch <oss@nina.schoetterlglausch.eu>,
Oliver Upton <oupton@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Ulrich Weigand <Ulrich.Weigand@de.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>, Will Deacon <will@kernel.org>,
Zenghui Yu <yuzenghui@huawei.com>
Subject: Re: [PATCH v4 09/27] KVM: arm64: Access elements of vcpu_gp_regs individually
Date: Mon, 13 Jul 2026 16:42:06 +0100 [thread overview]
Message-ID: <87a4ru6gmp.wl-maz@kernel.org> (raw)
In-Reply-To: <20260710115637.984749-H-seiden@linux.ibm.com>
On Fri, 10 Jul 2026 12:56:37 +0100,
Steffen Eiden <seiden@linux.ibm.com> wrote:
>
> On Mon, Jul 06, 2026 at 06:44:06PM +0100, Marc Zyngier wrote:
> > On Mon, 06 Jul 2026 09:52:09 +0100,
> > Steffen Eiden <seiden@linux.ibm.com> wrote:
> > >
> > > While for arm64 the members of vcpu_gp_regs are allocated continuous
> > > this is not necessarily true for other architectures implementing ARM.
> > >
> > > Let vcpu_gp_regs() no longer return the address of the user_pt_regs in
> > > the vcpu context but the address of the gp-register array field in the
> > > user_pt_reg struct.
> >
> > That's an interesting change of semantics, because this excludes PC
> > from the GPRs. This is valid on AArch64, but wrong for AArch32 (PC
> > really is R15, and is just another GPR).
> >
>
> I never looked into AArch32 thanks for pointing this out.
>
> > It isn't a huge deal, and nothing breaks, but that's something that
> > you may want to capture.
> >
>
> Shall I add a comment into the commit message that this splits pc from
> the gprs for arm32?
Yeah, I really want this stuff to be correctly documented, just in
case we break something and have to go back in time to find out why.
That's overall something that could be improved in this series.
[...]
> > > diff --git a/arch/arm64/kvm/hyp/exception.c b/arch/arm64/kvm/hyp/exception.c
> > > index bef40ddb16db..82611442a2d1 100644
> > > --- a/arch/arm64/kvm/hyp/exception.c
> > > +++ b/arch/arm64/kvm/hyp/exception.c
> > > @@ -277,6 +277,9 @@ static const u8 return_offsets[8][2] = {
> > > [7] = { 4, 4 }, /* FIQ, unused */
> > > };
> > >
> > > +#define OFFSETOF_PT_REG(__r) offsetof(struct user_pt_regs, __r)
> > > +#define COMPAT_IDX(__c) ((OFFSETOF_PT_REG(__c) - OFFSETOF_PT_REG(regs[0])) / sizeof(u64))
> > > +
> >
> > Oh $gawd, this is... awful.
> >
> > > static void enter_exception32(struct kvm_vcpu *vcpu, u32 mode, u32 vect_offset)
> > > {
> > > unsigned long spsr = *vcpu_cpsr(vcpu);
> > > @@ -292,12 +295,12 @@ static void enter_exception32(struct kvm_vcpu *vcpu, u32 mode, u32 vect_offset)
> > > switch(mode) {
> > > case PSR_AA32_MODE_ABT:
> > > __vcpu_write_spsr_abt(vcpu, host_spsr_to_spsr32(spsr));
> > > - vcpu_gp_regs(vcpu)->compat_lr_abt = return_address;
> > > + vcpu_gp_regs(vcpu)[COMPAT_IDX(compat_lr_abt)] = return_address;
> > > break;
> >
> > Stupid idea: why don't you simply have new #defines that make the
> > register number standalone, and make ptrace.h use that? Something line
> > this (which can obviously be extended to all the compat registers):
> >
> > diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
> > index 39582511ad72f..2d3d324d2598e 100644
> > --- a/arch/arm64/include/asm/ptrace.h
> > +++ b/arch/arm64/include/asm/ptrace.h
> > @@ -104,6 +104,10 @@
> > #define COMPAT_USER_SZ 296
> >
> > /* Architecturally defined mapping between AArch32 and AArch64 registers */
> > +enum aarch32_reg_mapping {
> > + __compat_lr_und = 22,
> > +};
> > +
> > #define compat_usr(x) regs[(x)]
> > #define compat_fp regs[11]
> > #define compat_sp regs[13]
> > @@ -115,7 +119,7 @@
> > #define compat_sp_svc regs[19]
> > #define compat_lr_abt regs[20]
> > #define compat_sp_abt regs[21]
> > -#define compat_lr_und regs[22]
> > +#define compat_lr_und regs[__compat_lr_und]
> > #define compat_sp_und regs[23]
> > #define compat_r8_fiq regs[24]
> > #define compat_r9_fiq regs[25]
> >
> > and then your #defines from hell can go?
>
> Great suggestion I do not like this macro hell myself. I'll implement it
> that way. Should I convert all compat_* regs to this concept or just the
> ones I need?
All of them, please., I value consistency. As you are doing this,
consider adding a reference to I_PYKVS, which describes the mapping in
the ARM ARM.
Thanks,
M.
--
Jazz isn't dead. It just smells funny.
next prev parent reply other threads:[~2026-07-13 15:40 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 8:52 [PATCH v4 00/27] KVM: s390: Introduce arm64 KVM Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 01/27] VFIO: take reference to the KVM module Steffen Eiden
2026-07-06 19:53 ` Jason Gunthorpe
2026-07-06 21:12 ` Sean Christopherson
2026-07-07 7:39 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 02/27] KVM, vfio: remove symbol_get(kvm_get_kvm_safe) from vfio Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 03/27] KVM, vfio: remove symbol_get(kvm_put_kvm) " Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 04/27] KVM: Make device name configurable Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 05/27] KVM: Remove KVM_MMIO as config option Steffen Eiden
2026-07-06 20:53 ` Marc Zyngier
2026-07-10 8:54 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 06/27] arm64: Use proper include variant Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 07/27] arm64: Prepare sharing arm64 headers with s390 Steffen Eiden
2026-07-06 21:22 ` Marc Zyngier
2026-07-10 9:54 ` Steffen Eiden
2026-07-13 15:33 ` Marc Zyngier
2026-07-06 8:52 ` [PATCH v4 08/27] KVM: arm64: Prepare sharing arm64 code " Steffen Eiden
2026-07-06 21:28 ` Marc Zyngier
2026-07-07 7:20 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 09/27] KVM: arm64: Access elements of vcpu_gp_regs individually Steffen Eiden
2026-07-06 17:44 ` Marc Zyngier
2026-07-10 11:56 ` Steffen Eiden
2026-07-13 15:42 ` Marc Zyngier [this message]
2026-07-06 8:52 ` [PATCH v4 10/27] KVM: arm64: Refactor core-reset into a separate function Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 11/27] s390: Use arm64 headers Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 12/27] KVM: s390: Use arm64 code Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 13/27] KVM: s390: Prepare KVM/s390 for a second KVM module Steffen Eiden
2026-07-10 9:22 ` Christian Borntraeger
2026-07-10 10:51 ` Steffen Eiden
2026-07-13 16:38 ` Claudio Imbrenda
2026-07-06 8:52 ` [PATCH v4 14/27] KVM: s390: Move s390 kvm code into a subdirectory Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 15/27] KVM: S390: Prepare gmap for a second KVM implementation Steffen Eiden
2026-07-08 12:33 ` Janosch Frank
2026-07-10 9:29 ` Christian Borntraeger
2026-07-10 12:29 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 16/27] KVM: s390: gmap: Refactor storage key and CMMA code into separate files Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 17/27] KVM: s390: Refactor prefix handling into a separate file Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 18/27] KVM: s390: Prepare kvm-s390 for a second kvm module Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 19/27] s390: Introduce Start Arm Execution instruction Steffen Eiden
2026-07-06 11:17 ` Janosch Frank
2026-07-06 11:30 ` Christian Borntraeger
2026-07-06 11:58 ` Steffen Eiden
2026-07-06 11:53 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 20/27] KVM: s390: arm64: Introduce host definitions Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 21/27] s390/hwcaps: Report SAE support as hwcap Steffen Eiden
2026-07-06 11:50 ` Janosch Frank
2026-07-06 8:52 ` [PATCH v4 22/27] KVM: s390: Add basic arm64 kvm module Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 23/27] KVM: s390: arm64: Implement required functions Steffen Eiden
2026-07-06 12:15 ` Janosch Frank
2026-07-06 20:35 ` Marc Zyngier
2026-07-10 13:40 ` Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 24/27] KVM: s390: arm64: Implement vm/vcpu create destroy Steffen Eiden
2026-07-07 15:10 ` Marc Zyngier
2026-07-08 6:51 ` Steffen Eiden
2026-07-08 7:36 ` Marc Zyngier
2026-07-06 8:52 ` [PATCH v4 25/27] KVM: s390: arm64: Implement vCPU IOCTLs Steffen Eiden
2026-07-08 10:44 ` Marc Zyngier
2026-07-10 14:07 ` Steffen Eiden
2026-07-13 15:46 ` Marc Zyngier
2026-07-06 8:52 ` [PATCH v4 26/27] KVM: s390: arm64: Implement basic page fault handler Steffen Eiden
2026-07-06 8:52 ` [PATCH v4 27/27] KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild Steffen Eiden
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=87a4ru6gmp.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=borntraeger@linux.ibm.com \
--cc=brueckner@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=david@kernel.org \
--cc=frankja@linux.ibm.com \
--cc=fritz@linux.ibm.com \
--cc=ggala@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=gra@linux.ibm.com \
--cc=hari55@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=nrb@linux.ibm.com \
--cc=oss@nina.schoetterlglausch.eu \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=svens@linux.ibm.com \
--cc=will@kernel.org \
--cc=yuzenghui@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