sh: Tidy up gUSA preempt handling.
authorPaul Mundt <lethal@linux-sh.org>
Fri, 28 Sep 2007 06:21:51 +0000 (15:21 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 28 Sep 2007 06:21:51 +0000 (15:21 +0900)
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>
arch/sh/kernel/signal.c

index 706d81c..0f657d3 100644 (file)
@@ -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 */