Thread (25 messages) flat view 25 messages, 3 authors, 2021-03-22

Re: [PATCH 03/10] powerpc/64e/interrupt: use new interrupt return

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2021-03-16 07:03:52

Excerpts from Christophe Leroy's message of March 15, 2021 5:50 pm:

Le 15/03/2021 à 04:17, Nicholas Piggin a écrit :
quoted
Update the new C and asm interrupt return code to account for 64e
specifics, switch over to use it.

The now-unused old ret_from_except code, that was moved to 64e after the
64s conversion, is removed.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
  arch/powerpc/include/asm/asm-prototypes.h |   2 -
  arch/powerpc/kernel/entry_64.S            |   9 +-
  arch/powerpc/kernel/exceptions-64e.S      | 321 ++--------------------
  arch/powerpc/kernel/interrupt.c           |  27 +-
  arch/powerpc/kernel/irq.c                 |  76 -----
  5 files changed, 56 insertions(+), 379 deletions(-)
...
quoted
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index da78eb6ab92f..1bb4e9b37748 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -139,7 +139,8 @@ ret_from_level_except:
  	ld	r3,_MSR(r1)
  	andi.	r3,r3,MSR_PR
  	beq	1f
-	b	ret_from_except
+	REST_NVGPRS(r1)
Could this be in a separate preceding patch (only the adding of REST_NVGPRS(), the call to 
ret_from_except can remain as is by removing the REST_NVGPRS() which is there to make 
ret_from_except and ret_from_except_lite identical).

Or maybe you can also do the name change to interrupt_return in that preceeding patch, so than the 
"use new interrupt return" patch only contains the interesting parts.
I don't like that so much, maybe the better split is to first change the 
common code to add the 64e bits, and then convert 64e from 
ret_from_except to interrupt_return and remove the old code.

...
quoted
@@ -1016,284 +1021,8 @@ alignment_more:
...
quoted
-fast_exception_return:
-	wrteei	0
-1:	mr	r0,r13
-	ld	r10,_MSR(r1)
-	REST_4GPRS(2, r1)
-	andi.	r6,r10,MSR_PR
-	REST_2GPRS(6, r1)
-	beq	1f
-	ACCOUNT_CPU_USER_EXIT(r13, r10, r11)
Then ACCOUNT_CPU_USER_EXIT can be removed from asm/ppc_asm.h
Will do.
quoted
@@ -387,7 +396,11 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned
  	while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) {
  		local_irq_enable(); /* returning to user: may enable */
  		if (ti_flags & _TIF_NEED_RESCHED) {
+#ifdef CONFIG_PPC_BOOK3E_64
+			schedule_user();
+#else
  			schedule();
+#endif
  		} else {
  			if (ti_flags & _TIF_SIGPENDING)
  				ret |= _TIF_RESTOREALL;
@@ -435,7 +448,10 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned
  	/*
  	 * We do this at the end so that we do context switch with KERNEL AMR
  	 */
+#ifndef CONFIG_PPC_BOOK3E_64
  	kuap_user_restore(regs);
Why do you need to ifdef this out ?
Only PPC_8xx, PPC_BOOK3S_32 and PPC_RADIX_MMU select PPC_HAVE_KUAP.
When PPC_KUAP is not selected, kuap_user_restore() is a static inline {} defined in asm/kup.h
It came in from an old patch rebase. I'll get rid of them.

...

Thanks,
Nick
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help