All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers
@ 2026-06-19 13:08 Will Deacon
  2026-06-19 13:52 ` Arnd Bergmann
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Will Deacon @ 2026-06-19 13:08 UTC (permalink / raw)
  To: linux-arm-kernel
  Cc: Will Deacon, Arnd Bergmann, Nick Desaulniers, Steffen Eiden,
	Andreas Grapentin, Catalin Marinas, Dave Martin, Mark Rutland,
	Marc Zyngier

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@arndb.de>
Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
Cc: Steffen Eiden <seiden@linux.ibm.com>
Cc: Andreas Grapentin <gra@linux.ibm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dave Martin <dave.martin@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Signed-off-by: Will Deacon <will@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.

 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



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers
  2026-06-19 13:08 [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers Will Deacon
@ 2026-06-19 13:52 ` Arnd Bergmann
  2026-06-19 14:09 ` Marc Zyngier
  2026-06-19 14:51 ` Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: Arnd Bergmann @ 2026-06-19 13:52 UTC (permalink / raw)
  To: Will Deacon, linux-arm-kernel
  Cc: Nick Desaulniers, Steffen Eiden, Andreas Grapentin,
	Catalin Marinas, Dave Martin, Mark Rutland, Marc Zyngier

On Fri, Jun 19, 2026, at 15:08, 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@arndb.de>
> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
> Cc: Steffen Eiden <seiden@linux.ibm.com>
> Cc: Andreas Grapentin <gra@linux.ibm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Martin <dave.martin@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Marc Zyngier <maz@kernel.org>
> Signed-off-by: Will Deacon <will@kernel.org>

Reviewed-by: Arnd Bergmann <arnd@arndb.de>

> 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.

clang-3.1 and gcc-4.6 support both and are 15 years old, older versions
only do __uint128_t. I agree that this should be fine.

     Arnd


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers
  2026-06-19 13:08 [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers Will Deacon
  2026-06-19 13:52 ` Arnd Bergmann
@ 2026-06-19 14:09 ` Marc Zyngier
  2026-06-19 14:51 ` Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2026-06-19 14:09 UTC (permalink / raw)
  To: Will Deacon
  Cc: linux-arm-kernel, Arnd Bergmann, Nick Desaulniers, Steffen Eiden,
	Andreas Grapentin, Catalin Marinas, Dave Martin, Mark Rutland

On Fri, 19 Jun 2026 14:08:34 +0100,
Will Deacon <will@kernel.org> 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@arndb.de>
> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
> Cc: Steffen Eiden <seiden@linux.ibm.com>
> Cc: Andreas Grapentin <gra@linux.ibm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Martin <dave.martin@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Marc Zyngier <maz@kernel.org>
> Signed-off-by: Will Deacon <will@kernel.org>

FWIW:

Reviewed-by: Marc Zyngier <maz@kernel.org>

	M.

-- 
Without deviation from the norm, progress is not possible.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers
  2026-06-19 13:08 [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers Will Deacon
  2026-06-19 13:52 ` Arnd Bergmann
  2026-06-19 14:09 ` Marc Zyngier
@ 2026-06-19 14:51 ` Mark Rutland
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Rutland @ 2026-06-19 14:51 UTC (permalink / raw)
  To: Will Deacon
  Cc: linux-arm-kernel, Arnd Bergmann, Nick Desaulniers, Steffen Eiden,
	Andreas Grapentin, Catalin Marinas, Dave Martin, Marc Zyngier

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@arndb.de>
> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
> Cc: Steffen Eiden <seiden@linux.ibm.com>
> Cc: Andreas Grapentin <gra@linux.ibm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Martin <dave.martin@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Marc Zyngier <maz@kernel.org>
> Signed-off-by: Will Deacon <will@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@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
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-19 14:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-19 13:08 [PATCH] arm64: uapi: Use __u128 instead of __uint128_t in UAPI headers Will Deacon
2026-06-19 13:52 ` Arnd Bergmann
2026-06-19 14:09 ` Marc Zyngier
2026-06-19 14:51 ` Mark Rutland

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.