sh: Ensure IRQs are enabled across do_notify_resume().
authorPaul Mundt <lethal@linux-sh.org>
Tue, 10 Jan 2012 07:30:37 +0000 (16:30 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Tue, 10 Jan 2012 07:30:37 +0000 (16:30 +0900)
do_notify_resume() can trigger the freezer via the try_to_freeze() path
(both explicitly through a redundant call in do_signal() or via
get_signal_to_deliver()). That IRQs were disabled across this callsite
became apparent with the might_sleep() introduction in try_to_freeze() by
Tejun in a0acae0e886d44bd5ce6d2f173c1ace0fcf0d9f6, resulting in:

BUG: sleeping function called from invalid context at include/linux/freezer.h:45
in_atomic(): 0, irqs_disabled(): 1, pid: 819, name: ntpd
no locks held by ntpd/819.
Stack: (0x9c81be80 to 0x9c81c000)
...

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/entry-common.S

index 2b15ae60c3a0257ed1ea48b34da0044c6a4bfaf6..f67601cb3f1f47da13a49ae4948021800b9a2f4d 100644 (file)
@@ -145,6 +145,7 @@ work_notifysig:
         mov    r15, r4
        mov     r12, r5         ! set arg1(save_r0)
        mov     r0, r6
+       sti
        mov.l   2f, r1
        mov.l   3f, r0
        jmp     @r1