linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64: signal: Update sigcontext reservations table
@ 2024-07-29 14:41 Dave Martin
  2024-07-29 14:53 ` Mark Brown
  2024-08-20 13:37 ` Will Deacon
  0 siblings, 2 replies; 23+ messages in thread
From: Dave Martin @ 2024-07-29 14:41 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: Catalin Marinas, Will Deacon, Mark Brown, Joey Gouly

The table tracking space usage in sigcontext.__reserved[] has got
a bit out of date.

Update it, and clarify the opt-in constraints.

Note, svl <= 64 would be a sufficient condition for keeping the
sve_context within range when in streaming SVE mode under SME, but
then za_context gets too big and userspace loses anyway.  To keep
the conditions simple, just write "svl <= 32" everywhere.

No functional change.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>

---

Note, this is a back-of-the-envelope calculation... but whatever way I
slice it, __reserved[] looks pretty much full (!)

If Mark in particular can double-check the SME impact, that would be
appreciated.

New arch features with a non-trivial amount of state that needs to be
saved may need to be disabled by default and require explicitly turning
on by a syscall unless we want to allow some ABI breakage (x86's
experience suggests that the world takes a long time to explode when
signal frames outgrow their official size, though).

Either way, do we need a new strategy to slow down the filling of the
remaining space?  There is continuing demand on it (see e.g., [1]).

Migration note: at least glibc since version 2.34 [2] has stopped
offering compile-time constant signal stack size #defines to programs
built with -D_GNU_SOURCE. [3]  This should mitigate ABI breaks for
programs that bother to size stacks correctly.

I haven't checked what other libcs and runtimes are doing.

Additional SME note: since userspace can freely switch in and out of
streaming SVE mode and freely enable/disable ZA and ZT0, I'm assuming
that none of sve_context, za_context and zt_context are mutually
exclusive, but please shout if I have confused myself here.

[1] [PATCH v4 18/29] arm64: add POE signal support
https://lore.kernel.org/linux-arm-kernel/20240503130147.1154804-19-joey.gouly@arm.com/

[2] [glibc] glibc-2.34
https://sourceware.org/git/?p=glibc.git;a=tag;h=9df03063320651bc629fa427eef3ac73fabb61ba

[3] [glibc] sysconf: Add _SC_MINSIGSTKSZ/_SC_SIGSTKSZ [BZ #20305]
https://sourceware.org/git/?p=glibc.git;a=commit;f=sysdeps/unix/sysv/linux/bits/sigstksz.h;h=6c57d320484988e87e446e2e60ce42816bf51d53
---
 arch/arm64/include/uapi/asm/sigcontext.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h
index 8a45b7a411e0..2cd60fd64e9a 100644
--- a/arch/arm64/include/uapi/asm/sigcontext.h
+++ b/arch/arm64/include/uapi/asm/sigcontext.h
@@ -44,11 +44,18 @@ struct sigcontext {
  *
  *	0x210		fpsimd_context
  *	 0x10		esr_context
- *	0x8a0		sve_context (vl <= 64) (optional)
+ *	0x8a0		sve_context (vl <= 64 && svl <= 32) (optional)
+ *	 0x10		tpidr2_context (optional)
+ *	0x410		za_context (svl <= 32) (optional)
+ *	 0x50		zt_context (optional)
+ *	 0x10		fpmr_context (optional)
  *	 0x20		extra_context (optional)
  *	 0x10		terminator (null _aarch64_ctx)
  *
- *	0x510		(reserved for future allocation)
+ *	 0x90		(reserved for future allocation)
+ *
+ * where vl is the non-streaming SVE vector length, as set with PR_SVE_SET_VL,
+ * and svl is the streaming SVE vector length, as set with PR_SME_SET_VL.
  *
  * New records that can exceed this space need to be opt-in for userspace, so
  * that an expanded signal frame is not generated unexpectedly.  The mechanism

base-commit: 8400291e289ee6b2bf9779ff1c83a291501f017b
-- 
2.34.1



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

end of thread, other threads:[~2024-09-05 11:05 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-29 14:41 [PATCH] arm64: signal: Update sigcontext reservations table Dave Martin
2024-07-29 14:53 ` Mark Brown
2024-07-29 15:51   ` Dave Martin
2024-07-29 17:01     ` Mark Brown
2024-07-30 12:51       ` Dave Martin
2024-07-30 13:22         ` Mark Brown
2024-07-30 15:07           ` Dave Martin
2024-07-30 16:00             ` Mark Brown
2024-07-31 10:38               ` Dave Martin
2024-07-31 11:49                 ` Mark Brown
2024-07-31 14:38                   ` Dave Martin
2024-07-31 14:58                     ` Mark Brown
2024-07-31 16:09                       ` Dave Martin
2024-07-31 16:14                         ` Mark Brown
2024-07-31 16:23                           ` Dave Martin
2024-08-20 13:37 ` Will Deacon
2024-08-20 14:38   ` Dave Martin
2024-08-23 11:46     ` Will Deacon
2024-09-03 14:18       ` Dave Martin
2024-09-03 18:26         ` Mark Brown
2024-09-04 11:24           ` Dave Martin
2024-09-04 11:49             ` Mark Brown
2024-09-05 10:59               ` Dave Martin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).