diff options
Diffstat (limited to 'arch/sh/kernel/signal.c')
-rw-r--r-- | arch/sh/kernel/signal.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/arch/sh/kernel/signal.c b/arch/sh/kernel/signal.c index 706d81ccd101..2f42442cf164 100644 --- a/arch/sh/kernel/signal.c +++ b/arch/sh/kernel/signal.c | |||
@@ -507,13 +507,11 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
507 | ctrl_inw(regs->pc - 4)); | 507 | ctrl_inw(regs->pc - 4)); |
508 | break; | 508 | break; |
509 | } | 509 | } |
510 | #ifdef CONFIG_GUSA | ||
510 | } else { | 511 | } else { |
511 | /* gUSA handling */ | 512 | /* gUSA handling */ |
512 | #ifdef CONFIG_PREEMPT | 513 | preempt_disable(); |
513 | unsigned long flags; | ||
514 | 514 | ||
515 | local_irq_save(flags); | ||
516 | #endif | ||
517 | if (regs->regs[15] >= 0xc0000000) { | 515 | if (regs->regs[15] >= 0xc0000000) { |
518 | int offset = (int)regs->regs[15]; | 516 | int offset = (int)regs->regs[15]; |
519 | 517 | ||
@@ -524,8 +522,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
524 | regs->pc = regs->regs[0] + offset - | 522 | regs->pc = regs->regs[0] + offset - |
525 | instruction_size(ctrl_inw(regs->pc-4)); | 523 | instruction_size(ctrl_inw(regs->pc-4)); |
526 | } | 524 | } |
527 | #ifdef CONFIG_PREEMPT | 525 | |
528 | local_irq_restore(flags); | 526 | preempt_enable_no_resched(); |
529 | #endif | 527 | #endif |
530 | } | 528 | } |
531 | 529 | ||