From: Marc Zyngier <maz@kernel.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Zenghui Yu <yuzenghui@huawei.com>, Arnd Bergmann <arnd@arndb.de>,
Joey Gouly <joey.gouly@arm.com>, Will Deacon <will@kernel.org>,
Naresh Kamboju <naresh.kamboju@linaro.org>,
Linaro Kernel Functional Testing <lkft@linaro.org>
Subject: Re: [PATCH] KVM: arm64: nv: Work around lack of pauth support in old toolchains
Date: Tue, 23 Apr 2024 12:33:00 +0100 [thread overview]
Message-ID: <87sezctitv.wl-maz@kernel.org> (raw)
In-Reply-To: <ZidzMO-tcsFUgL1r@FVFF77S0Q05N>
On Tue, 23 Apr 2024 09:37:04 +0100,
Mark Rutland <mark.rutland@arm.com> wrote:
>
> On Mon, Apr 22, 2024 at 11:48:49PM +0100, Marc Zyngier wrote:
> > We still support GCC 8.x, and it appears that this toolchain
> > does not understand "pauth" as a valid architectural extension.
> > After all, it's only been 8 years since ARMv8.3 was released...
> >
> > This results in the NV ERETAx code breaking the build, as it relies
> > on this extention to make use of the PACGA instruction.
> >
> > Work around it by hand-assembling the instruction using a mind-bending
> > trick lifted from an old patch by Will. Magic.
> >
> > Fixes: e09faab353a6 ("KVM: arm64: nv: Add emulation for ERETAx instructions")
> > Reported-by: Linaro Kernel Functional Testing <lkft@linaro.org>
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
> > ---
> > arch/arm64/kvm/pauth.c | 19 +++++++++++++++++--
> > 1 file changed, 17 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/arm64/kvm/pauth.c b/arch/arm64/kvm/pauth.c
> > index a3a5c404375b..8baf2a2cbdd3 100644
> > --- a/arch/arm64/kvm/pauth.c
> > +++ b/arch/arm64/kvm/pauth.c
> > @@ -17,6 +17,22 @@
> > #include <asm/kvm_emulate.h>
> > #include <asm/pointer_auth.h>
> >
> > +/*
> > + * "// This is some of my finest work" (Will Deacon, 2019-02-12)
> > + *
> > + * The jury is still out on that one.
> > + */
> > +#define REG(r) "(0%x[" #r "] - ((0%x[" #r "] >> 4) * 6))"
> > +
> > +/* PACGA Xd, Xn, Xm */
> > +#define PACGA(d,n,m) \
> > + asm volatile(".inst 0x9AC03000 |" \
> > + "(" REG(Rd) "<< 0) |" \
> > + "(" REG(Rn) "<< 5) |" \
> > + "(" REG(Rm) "<< 16)\n" \
> > + : [Rd] "=r" ((d)) \
> > + : [Rn] "r" ((n)), [Rm] "r" ((m)))
>
> Can you please use <asm/gpr-num.h> rather than open-coding this new REG()
> helper? That way this'll be consistent with the way we assemble MRS/MSR in
> <asm/sysreg.h>, and it avoids the few seconds of confusion trying to figure out
> the maths in the REG() helper (neat trick though!).
Ah, I had completely forgot about this guy. Good call. I'll fold that
patchlet in and re-push the result.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Zenghui Yu <yuzenghui@huawei.com>, Arnd Bergmann <arnd@arndb.de>,
Joey Gouly <joey.gouly@arm.com>, Will Deacon <will@kernel.org>,
Naresh Kamboju <naresh.kamboju@linaro.org>,
Linaro Kernel Functional Testing <lkft@linaro.org>
Subject: Re: [PATCH] KVM: arm64: nv: Work around lack of pauth support in old toolchains
Date: Tue, 23 Apr 2024 12:33:00 +0100 [thread overview]
Message-ID: <87sezctitv.wl-maz@kernel.org> (raw)
In-Reply-To: <ZidzMO-tcsFUgL1r@FVFF77S0Q05N>
On Tue, 23 Apr 2024 09:37:04 +0100,
Mark Rutland <mark.rutland@arm.com> wrote:
>
> On Mon, Apr 22, 2024 at 11:48:49PM +0100, Marc Zyngier wrote:
> > We still support GCC 8.x, and it appears that this toolchain
> > does not understand "pauth" as a valid architectural extension.
> > After all, it's only been 8 years since ARMv8.3 was released...
> >
> > This results in the NV ERETAx code breaking the build, as it relies
> > on this extention to make use of the PACGA instruction.
> >
> > Work around it by hand-assembling the instruction using a mind-bending
> > trick lifted from an old patch by Will. Magic.
> >
> > Fixes: e09faab353a6 ("KVM: arm64: nv: Add emulation for ERETAx instructions")
> > Reported-by: Linaro Kernel Functional Testing <lkft@linaro.org>
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
> > ---
> > arch/arm64/kvm/pauth.c | 19 +++++++++++++++++--
> > 1 file changed, 17 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/arm64/kvm/pauth.c b/arch/arm64/kvm/pauth.c
> > index a3a5c404375b..8baf2a2cbdd3 100644
> > --- a/arch/arm64/kvm/pauth.c
> > +++ b/arch/arm64/kvm/pauth.c
> > @@ -17,6 +17,22 @@
> > #include <asm/kvm_emulate.h>
> > #include <asm/pointer_auth.h>
> >
> > +/*
> > + * "// This is some of my finest work" (Will Deacon, 2019-02-12)
> > + *
> > + * The jury is still out on that one.
> > + */
> > +#define REG(r) "(0%x[" #r "] - ((0%x[" #r "] >> 4) * 6))"
> > +
> > +/* PACGA Xd, Xn, Xm */
> > +#define PACGA(d,n,m) \
> > + asm volatile(".inst 0x9AC03000 |" \
> > + "(" REG(Rd) "<< 0) |" \
> > + "(" REG(Rn) "<< 5) |" \
> > + "(" REG(Rm) "<< 16)\n" \
> > + : [Rd] "=r" ((d)) \
> > + : [Rn] "r" ((n)), [Rm] "r" ((m)))
>
> Can you please use <asm/gpr-num.h> rather than open-coding this new REG()
> helper? That way this'll be consistent with the way we assemble MRS/MSR in
> <asm/sysreg.h>, and it avoids the few seconds of confusion trying to figure out
> the maths in the REG() helper (neat trick though!).
Ah, I had completely forgot about this guy. Good call. I'll fold that
patchlet in and re-push the result.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-04-23 11:33 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-22 22:48 [PATCH] KVM: arm64: nv: Work around lack of pauth support in old toolchains Marc Zyngier
2024-04-22 22:48 ` Marc Zyngier
2024-04-23 8:24 ` Arnd Bergmann
2024-04-23 8:24 ` Arnd Bergmann
2024-04-23 12:00 ` Aiqun Yu (Maria)
2024-04-23 12:00 ` Aiqun Yu (Maria)
2024-04-23 12:06 ` Marc Zyngier
2024-04-23 12:06 ` Marc Zyngier
2024-04-23 12:37 ` Arnd Bergmann
2024-04-23 12:37 ` Arnd Bergmann
2024-04-23 16:15 ` Marc Zyngier
2024-04-23 16:15 ` Marc Zyngier
2024-04-24 1:54 ` Aiqun Yu (Maria)
2024-04-24 1:54 ` Aiqun Yu (Maria)
2024-04-23 8:37 ` Mark Rutland
2024-04-23 8:37 ` Mark Rutland
2024-04-23 11:33 ` Marc Zyngier [this message]
2024-04-23 11:33 ` Marc Zyngier
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=87sezctitv.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=arnd@arndb.de \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=lkft@linaro.org \
--cc=mark.rutland@arm.com \
--cc=naresh.kamboju@linaro.org \
--cc=oliver.upton@linux.dev \
--cc=suzuki.poulose@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.