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 08:15:15

Excerpts from Christophe Leroy's message of March 16, 2021 5:29 pm:

Le 16/03/2021 à 08:25, Nicholas Piggin a écrit :
quoted
Excerpts from Nicholas Piggin's message of March 16, 2021 5:04 pm:
quoted
Excerpts from Christophe Leroy's message of March 15, 2021 11:30 pm:
quoted

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(-)
diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c
index fbabb49888d3..ae7b058b2970 100644
--- a/arch/powerpc/kernel/interrupt.c
+++ b/arch/powerpc/kernel/interrupt.c
@@ -235,6 +235,10 @@ static notrace void booke_load_dbcr0(void)
   #endif
   }
   
+/* temporary hack for context tracking, removed in later patch */
+#include <linux/sched/debug.h>
+asmlinkage __visible void __sched schedule_user(void);
+
   /*
    * This should be called after a syscall returns, with r3 the return value
    * from the syscall. If this function returns non-zero, the system call
@@ -292,7 +296,11 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3,
   	while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) {
   		local_irq_enable();
   		if (ti_flags & _TIF_NEED_RESCHED) {
+#ifdef CONFIG_PPC_BOOK3E_64
+			schedule_user();
+#else
   			schedule();
+#endif
   		} else {
   			/*
   			 * SIGPENDING must restore signal handler function
@@ -360,7 +368,6 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3,
   	return ret;
   }
   
-#ifndef CONFIG_PPC_BOOK3E_64 /* BOOK3E not yet using this */
   notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned long msr)
   {
   	unsigned long ti_flags;
@@ -372,7 +379,9 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned
   	BUG_ON(!(regs->msr & MSR_PR));
   	BUG_ON(!FULL_REGS(regs));
   	BUG_ON(arch_irq_disabled_regs(regs));
+#ifdef CONFIG_PPC_BOOK3S_64
Shouldn't this go away in patch 6 as well ?
Or is that needed at all ? In syscall_exit_prepare() it is not ifdefed .
Hmm, not sure. I'll take a look. It probably shouldn't be ifdefed at all
but definitely by the end it should run without warning.
Oh I got confused and thought that was the syscall exit. Interrupt exit
has to keep this until patch 6 because 64e context tracking does
everything in interrupt wrappers, so by the time we get here it will
already be set to CONTEXT_USER.
ok, but that it has to go in patch 6 ? At the time being the #ifdef is still there at the end of the 
series
Yes, that was an oversight. I'll remove it.

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