[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