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:05:05

Excerpts from Christophe Leroy's message of March 15, 2021 11:30 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(-)
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.

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