From: Rohan McLure <rmclure@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Rohan McLure <rmclure@linux.ibm.com>
Subject: [PATCH v3 16/18] powerpc/32: Clarify interrupt restores with REST_GPR macro in entry_32.S
Date: Fri, 19 Aug 2022 13:38:04 +1000 [thread overview]
Message-ID: <20220819033806.162054-17-rmclure@linux.ibm.com> (raw)
In-Reply-To: <20220819033806.162054-1-rmclure@linux.ibm.com>
Restoring the register state of the interrupted thread involves issuing
a large number of predictable loads to the kernel stack frame. Issue the
REST_GPR{,S} macros to clearly signal when this is happening, and bunch
together restores at the end of the interrupt handler where the saved
value is not consumed earlier in the handler code.
Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
Reported-by: Christophe Leroy <christophe.leroy@csgroup.eu>
---
V2 -> V3: New patch.
---
arch/powerpc/kernel/entry_32.S | 35 ++++++++++++--------------------
1 file changed, 13 insertions(+), 22 deletions(-)
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 8d6e02ef5dc0..03a105a5806a 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -68,7 +68,7 @@ prepare_transfer_to_handler:
lwz r9,_MSR(r11) /* if sleeping, clear MSR.EE */
rlwinm r9,r9,0,~MSR_EE
lwz r12,_LINK(r11) /* and return to address in LR */
- lwz r2, GPR2(r11)
+ REST_GPR(2, r11)
b fast_exception_return
_ASM_NOKPROBE_SYMBOL(prepare_transfer_to_handler)
#endif /* CONFIG_PPC_BOOK3S_32 || CONFIG_E500 */
@@ -144,7 +144,7 @@ ret_from_syscall:
lwz r7,_NIP(r1)
lwz r8,_MSR(r1)
cmpwi r3,0
- lwz r3,GPR3(r1)
+ REST_GPR(3, r1)
syscall_exit_finish:
mtspr SPRN_SRR0,r7
mtspr SPRN_SRR1,r8
@@ -152,8 +152,8 @@ syscall_exit_finish:
bne 3f
mtcr r5
-1: lwz r2,GPR2(r1)
- lwz r1,GPR1(r1)
+1: REST_GPR(2, r1)
+ REST_GPR(1, r1)
rfi
#ifdef CONFIG_40x
b . /* Prevent prefetch past rfi */
@@ -165,10 +165,8 @@ syscall_exit_finish:
REST_NVGPRS(r1)
mtctr r4
mtxer r5
- lwz r0,GPR0(r1)
- lwz r3,GPR3(r1)
- REST_GPRS(4, 11, r1)
- lwz r12,GPR12(r1)
+ REST_GPR(0, r1)
+ REST_GPRS(3, 12, r1)
b 1b
#ifdef CONFIG_44x
@@ -260,24 +258,22 @@ fast_exception_return:
beq 3f /* if not, we've got problems */
#endif
-2: REST_GPRS(3, 6, r11)
- lwz r10,_CCR(r11)
- REST_GPRS(1, 2, r11)
+2: lwz r10,_CCR(r11)
mtcr r10
lwz r10,_LINK(r11)
mtlr r10
/* Clear the exception_marker on the stack to avoid confusing stacktrace */
li r10, 0
stw r10, 8(r11)
- REST_GPR(10, r11)
#if defined(CONFIG_PPC_8xx) && defined(CONFIG_PERF_EVENTS)
mtspr SPRN_NRI, r0
#endif
mtspr SPRN_SRR1,r9
mtspr SPRN_SRR0,r12
- REST_GPR(9, r11)
+ REST_GPRS(1, 6, r11)
+ REST_GPRS(9, 10, r11)
REST_GPR(12, r11)
- lwz r11,GPR11(r11)
+ REST_GPR(11, r11)
rfi
#ifdef CONFIG_40x
b . /* Prevent prefetch past rfi */
@@ -454,9 +450,7 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return)
lwz r3,_MSR(r1); \
andi. r3,r3,MSR_PR; \
bne interrupt_return; \
- lwz r0,GPR0(r1); \
- lwz r2,GPR2(r1); \
- REST_GPRS(3, 8, r1); \
+ REST_GPR(0, r1); \
lwz r10,_XER(r1); \
lwz r11,_CTR(r1); \
mtspr SPRN_XER,r10; \
@@ -475,11 +469,8 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return)
lwz r12,_MSR(r1); \
mtspr exc_lvl_srr0,r11; \
mtspr exc_lvl_srr1,r12; \
- lwz r9,GPR9(r1); \
- lwz r12,GPR12(r1); \
- lwz r10,GPR10(r1); \
- lwz r11,GPR11(r1); \
- lwz r1,GPR1(r1); \
+ REST_GPRS(2, 12, r1); \
+ REST_GPR(1, r1); \
exc_lvl_rfi; \
b .; /* prevent prefetch past exc_lvl_rfi */
--
2.34.1
next prev parent reply other threads:[~2022-08-19 3:51 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-19 3:37 [PATCH v3 00/18] powerpc: Syscall wrapper and register clearing Rohan McLure
2022-08-19 3:37 ` [PATCH v3 01/18] powerpc: Remove asmlinkage from syscall handler definitions Rohan McLure
2022-08-19 3:37 ` [PATCH v3 02/18] powerpc: Use generic fallocate compatibility syscall Rohan McLure
2022-08-19 3:37 ` [PATCH v3 03/18] powerpc/32: Remove powerpc select specialisation Rohan McLure
2022-08-19 3:37 ` [PATCH v3 04/18] powerpc: Provide do_ppc64_personality helper Rohan McLure
2022-08-19 3:37 ` [PATCH v3 05/18] powerpc: Adopt SYSCALL_DEFINE for arch-specific syscall handlers Rohan McLure
2022-08-19 6:41 ` Christophe Leroy
2022-08-19 3:37 ` [PATCH v3 06/18] powerpc: Remove direct call to personality syscall handler Rohan McLure
2022-08-19 3:37 ` [PATCH v3 07/18] powerpc: Remove direct call to mmap2 syscall handlers Rohan McLure
2022-08-19 6:41 ` Christophe Leroy
2022-08-19 3:37 ` [PATCH v3 08/18] powerpc: Include all arch-specific syscall prototypes Rohan McLure
2022-08-19 3:37 ` [PATCH v3 09/18] powerpc: Enable compile-time check for syscall handlers Rohan McLure
2022-08-19 3:37 ` [PATCH v3 10/18] powerpc: Use common syscall handler type Rohan McLure
2022-08-19 3:37 ` [PATCH v3 11/18] powerpc: Add ZEROIZE_GPRS macros for register clears Rohan McLure
2022-08-19 6:45 ` Christophe Leroy
2022-08-19 3:38 ` [PATCH v3 12/18] Revert "powerpc/syscall: Save r3 in regs->orig_r3" Rohan McLure
2022-08-19 3:38 ` [PATCH v3 13/18] powerpc: Provide syscall wrapper Rohan McLure
2022-08-19 3:38 ` [PATCH v3 14/18] powerpc/64s: Clear/restore caller gprs in syscall interrupt/return Rohan McLure
2022-08-19 6:52 ` Christophe Leroy
2022-08-22 3:47 ` Rohan McLure
2022-08-19 3:38 ` [PATCH v3 15/18] powerpc/64s: Use {ZEROIZE,SAVE,REST}_GPRS macros in sc, scv 0 handlers Rohan McLure
2022-08-19 3:38 ` Rohan McLure [this message]
2022-08-19 6:29 ` [PATCH v3 16/18] powerpc/32: Clarify interrupt restores with REST_GPR macro in entry_32.S Christophe Leroy
2022-08-19 3:38 ` [PATCH v3 17/18] powerpc/64s: Fix comment on interrupt handler prologue Rohan McLure
2022-08-19 3:38 ` [PATCH v3 18/18] powerpc/64s: Clear gprs on interrupt routine entry Rohan McLure
2022-08-19 7:41 ` Christophe Leroy
2022-08-24 1:24 ` Rohan McLure
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=20220819033806.162054-17-rmclure@linux.ibm.com \
--to=rmclure@linux.ibm.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).