summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2010-06-14 18:20:05 +0200
committerThomas Gleixner <tglx@linutronix.de>2010-06-14 18:20:05 +0200
commitc7dec167a21e00e5ebd1c5c525719814b95c7bf5 (patch)
tree9b416c9ca57dfdef9967571072fbbd4e3fc97e82
parent4f3846332fafadf9b6155959ed4581c54a099bb9 (diff)
downloadlwn-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.c8
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 = &current->saved_sigmask;
else if (!oldset)