Kaynağa Gözat

sh: Tidy up gUSA preempt handling.

Currently gUSA toggles hardirqs to disable preemption in the signal
handler. Make the preemption toggling explicit, and kill off some
CONFIG_PREEMPT ifdefs in the process.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt 18 yıl önce
ebeveyn
işleme
e5137682a1
1 değiştirilmiş dosya ile 3 ekleme ve 7 silme
  1. 3 7
      arch/sh/kernel/signal.c

+ 3 - 7
arch/sh/kernel/signal.c

@@ -509,11 +509,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
 		}
 	} else {
 		/* gUSA handling */
-#ifdef CONFIG_PREEMPT
-		unsigned long flags;
+		preempt_disable();
 
-		local_irq_save(flags);
-#endif
 		if (regs->regs[15] >= 0xc0000000) {
 			int offset = (int)regs->regs[15];
 
@@ -524,9 +521,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
 				regs->pc = regs->regs[0] + offset -
 					instruction_size(ctrl_inw(regs->pc-4));
 		}
-#ifdef CONFIG_PREEMPT
-		local_irq_restore(flags);
-#endif
+
+		preempt_enable_no_resched();
 	}
 
 	/* Set up the stack frame */