linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Nicholas Piggin <npiggin@gmail.com>
Subject: [PATCH 16/17] powerpc/64: ELFv2 use minimal stack frames in int and switch frame sizes
Date: Sun, 27 Nov 2022 22:49:41 +1000	[thread overview]
Message-ID: <20221127124942.1665522-17-npiggin@gmail.com> (raw)
In-Reply-To: <20221127124942.1665522-1-npiggin@gmail.com>

Adjust the ELFv2 interrupt and switch frames to the minimum C ABI size,
plus pt_regs, plus 16 bytes for the aligned regs marker for the int
frame (and the switch frame needs to match that because it uses the same
regs offset as the int frame).

This saves 80 bytes of kernel stack per interrupt. It's the principle of
getting our accounting right that's more important than the practical
saving.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/powerpc/include/asm/ptrace.h | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index 412ef0749775..a9dfce62a5eb 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -120,16 +119,26 @@ struct pt_regs
 
 #define STACK_FRAME_OVERHEAD	112	/* size of minimum stack frame */
 #define STACK_FRAME_LR_SAVE	2	/* Location of LR in stack frame */
+
+#ifdef CONFIG_PPC64_ELF_ABI_V2
+#define STACK_FRAME_MIN_SIZE	32
+#define STACK_USER_INT_FRAME_SIZE	(sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE + 16)
+#define STACK_INT_FRAME_REGS	(STACK_FRAME_MIN_SIZE + 16)
+#define STACK_INT_FRAME_MARKER	STACK_FRAME_MIN_SIZE
+#define STACK_SWITCH_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE + 16)
+#define STACK_SWITCH_FRAME_REGS	(STACK_FRAME_MIN_SIZE + 16)
+#else
+/*
+ * The ELFv1 ABI specifies 48 bytes plus a minimum 64 byte parameter save
+ * area. This parameter area is not used by calls to C from interrupt entry,
+ * so the second from last one of those is used for the frame marker.
+ */
+#define STACK_FRAME_MIN_SIZE	112
 #define STACK_USER_INT_FRAME_SIZE	(sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
 #define STACK_INT_FRAME_REGS	STACK_FRAME_OVERHEAD
 #define STACK_INT_FRAME_MARKER	(STACK_FRAME_OVERHEAD - 16)
 #define STACK_SWITCH_FRAME_SIZE	(sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
 #define STACK_SWITCH_FRAME_REGS	STACK_FRAME_OVERHEAD
-
-#ifdef CONFIG_PPC64_ELF_ABI_V2
-#define STACK_FRAME_MIN_SIZE	32
-#else
-#define STACK_FRAME_MIN_SIZE	STACK_FRAME_OVERHEAD
 #endif
 
 /* Size of dummy stack frame allocated when calling signal handler. */
-- 
2.37.2


  parent reply	other threads:[~2022-11-27 13:05 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-27 12:49 [PATCH 00/17] powerpc: Remove STACK_FRAME_OVERHEAD Nicholas Piggin
2022-11-27 12:49 ` [PATCH 01/17] KVM: PPC: Book3E: Fix CONFIG_TRACE_IRQFLAGS support Nicholas Piggin
2022-11-27 12:49 ` [PATCH 02/17] powerpc/64: Remove asm interrupt tracing call helpers Nicholas Piggin
2022-11-27 12:49 ` [PATCH 03/17] powerpc/perf: callchain validate kernel stack pointer bounds Nicholas Piggin
2022-11-27 12:49 ` [PATCH 04/17] powerpc: Rearrange copy_thread child stack creation Nicholas Piggin
2022-11-27 12:49 ` [PATCH 05/17] powerpc/pseries: hvcall stack frame overhead Nicholas Piggin
2022-11-27 12:49 ` [PATCH 06/17] powerpc: simplify ppc_save_regs Nicholas Piggin
2022-11-27 12:49 ` [PATCH 07/17] powerpc: add definition for pt_regs offset within an interrupt frame Nicholas Piggin
2022-11-27 12:49 ` [PATCH 08/17] powerpc: add a definition for the marker offset within the " Nicholas Piggin
2022-11-27 12:49 ` [PATCH 09/17] powerpc: Rename STACK_FRAME_MARKER and derive it from frame offset Nicholas Piggin
2022-11-27 12:49 ` [PATCH 10/17] powerpc: add a define for the user interrupt frame size Nicholas Piggin
2022-11-27 12:49 ` [PATCH 11/17] powerpc: add a define for the switch frame size and regs offset Nicholas Piggin
2022-11-27 12:49 ` [PATCH 12/17] powerpc: copy_thread fill in interrupt frame marker and back chain Nicholas Piggin
2022-11-27 12:49 ` [PATCH 13/17] powerpc: copy_thread add a back chain to the switch stack frame Nicholas Piggin
2022-11-27 12:49 ` [PATCH 14/17] powerpc: split validate_sp into two functions Nicholas Piggin
2022-11-27 12:49 ` [PATCH 15/17] powerpc: allow minimum sized kernel stack frames Nicholas Piggin
2022-11-27 12:49 ` Nicholas Piggin [this message]
2022-11-27 12:49 ` [PATCH 17/17] powerpc: remove STACK_FRAME_OVERHEAD Nicholas Piggin
2022-12-08 12:40 ` [PATCH 00/17] powerpc: Remove STACK_FRAME_OVERHEAD Michael Ellerman

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=20221127124942.1665522-17-npiggin@gmail.com \
    --to=npiggin@gmail.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /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 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).