[PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers
Mark Rutland
mark.rutland at arm.com
Fri Jun 19 07:51:55 PDT 2026
On Fri, Jun 19, 2026 at 02:08:34PM +0100, Will Deacon wrote:
> The arm64 UAPI exposes '__uint128_t' types in the members of
> 'struct user_fpsimd_state', 'struct user_pac_address_keys' and in the
> signal frame via 'struct fpsimd_context'. Since the alignment of such
> a type appears to be non-portable (16 bytes on arm64, 8 bytes on s390),
> prefer the '__u128' typedef from uapi/linux/types.h, which makes the
> alignment explicit and allows the definitions to be reused by other
> host architectures.
>
> Cc: Arnd Bergmann <arnd at arndb.de>
> Cc: Nick Desaulniers <nick.desaulniers+lkml at gmail.com>
> Cc: Steffen Eiden <seiden at linux.ibm.com>
> Cc: Andreas Grapentin <gra at linux.ibm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Dave Martin <dave.martin at arm.com>
> Cc: Mark Rutland <mark.rutland at arm.com>
> Cc: Marc Zyngier <maz at kernel.org>
> Signed-off-by: Will Deacon <will at kernel.org>
> ---
>
> This aims to help a little with the s390/arm64 KVM series at:
>
> https://lore.kernel.org/r/20260529155050.2902245-1-seiden@linux.ibm.com
>
> by allowing the relevant parts of the arm64 UAPI to be used directly by
> s390 rather than copied and modified.
>
> I think it's a straightforward change, but the only thing that makes me
> pause for thought is whether there are toolchains out there which accept
> __uint128_t but not __int128. Then again, if that crops up as an issue
> we can probably just tweak the typedef we have in uapi/linux/types.h.
That's all fine to me in concept, so:
Acked-by: Mark Rutland <mark.rutland at arm.com>
A few places in arch/arm64/kernel/fpsimd.c and
arch/arm64/kernel/ptrace.c use __uint128_t to match the uapi headers.
For consistency (and to avoid people accidentally using __uint128_t in
future), I reckon it would be good to fix those up to match, but that
can be a follow-up.
Mark.
> arch/arm64/include/uapi/asm/ptrace.h | 12 ++++++------
> arch/arm64/include/uapi/asm/sigcontext.h | 6 +++---
> 2 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/include/uapi/asm/ptrace.h
> index 6fed93fb2536..15649a253a57 100644
> --- a/arch/arm64/include/uapi/asm/ptrace.h
> +++ b/arch/arm64/include/uapi/asm/ptrace.h
> @@ -93,7 +93,7 @@ struct user_pt_regs {
> };
>
> struct user_fpsimd_state {
> - __uint128_t vregs[32];
> + __u128 vregs[32];
> __u32 fpsr;
> __u32 fpcr;
> __u32 __reserved[2];
> @@ -258,14 +258,14 @@ struct user_pac_mask {
> /* pointer authentication keys (NT_ARM_PACA_KEYS, NT_ARM_PACG_KEYS) */
>
> struct user_pac_address_keys {
> - __uint128_t apiakey;
> - __uint128_t apibkey;
> - __uint128_t apdakey;
> - __uint128_t apdbkey;
> + __u128 apiakey;
> + __u128 apibkey;
> + __u128 apdakey;
> + __u128 apdbkey;
> };
>
> struct user_pac_generic_keys {
> - __uint128_t apgakey;
> + __u128 apgakey;
> };
>
> /* ZA state (NT_ARM_ZA) */
> diff --git a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h
> index e29bf3e2d0cc..d250ca7a1d46 100644
> --- a/arch/arm64/include/uapi/asm/sigcontext.h
> +++ b/arch/arm64/include/uapi/asm/sigcontext.h
> @@ -78,7 +78,7 @@ struct fpsimd_context {
> struct _aarch64_ctx head;
> __u32 fpsr;
> __u32 fpcr;
> - __uint128_t vregs[32];
> + __u128 vregs[32];
> };
>
> /*
> @@ -266,8 +266,8 @@ struct gcs_context {
> * - ---- -----------
> * REGS the entire SVE context
> *
> - * ZREGS __uint128_t[SVE_NUM_ZREGS][vq] all Z-registers
> - * ZREG __uint128_t[vq] individual Z-register Zn
> + * ZREGS __u128[SVE_NUM_ZREGS][vq] all Z-registers
> + * ZREG __u128[vq] individual Z-register Zn
> *
> * PREGS uint16_t[SVE_NUM_PREGS][vq] all P-registers
> * PREG uint16_t[vq] individual P-register Pn
> --
> 2.55.0.rc0.738.g0c8ab3ebcc-goog
>
More information about the linux-arm-kernel
mailing list