diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2010-06-14 18:20:05 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-06-14 18:20:05 +0200 |
commit | c7dec167a21e00e5ebd1c5c525719814b95c7bf5 (patch) | |
tree | 9b416c9ca57dfdef9967571072fbbd4e3fc97e82 | |
parent | 4f3846332fafadf9b6155959ed4581c54a099bb9 (diff) | |
download | lwn-c7dec167a21e00e5ebd1c5c525719814b95c7bf5.tar.gz lwn-c7dec167a21e00e5ebd1c5c525719814b95c7bf5.zip |
powerpc: Enable interrupts in do_signal()
do_signal() is missing an interrupt enabled which causes might_sleep
warning or scheduling while atomic bugs.
Reported-by: Will Schmidt <will_schmidt@vnet.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/powerpc/kernel/signal.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index 00b5078da9a3..fa580f951d73 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c @@ -120,6 +120,14 @@ static int do_signal_pending(sigset_t *oldset, struct pt_regs *regs) int ret; int is32 = is_32bit_task(); +#ifdef CONFIG_PREEMPT_RT + /* + * Fully-preemptible kernel does not need interrupts disabled: + */ + local_irq_enable(); + preempt_check_resched(); +#endif + if (current_thread_info()->local_flags & _TLF_RESTORE_SIGMASK) oldset = ¤t->saved_sigmask; else if (!oldset) |