[PATCH] x86_64: Don't call do_exit with interrupts disabled after IRET exception
authorAndi Kleen <ak@suse.de>
Thu, 16 Feb 2006 22:42:01 +0000 (23:42 +0100)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 17 Feb 2006 16:00:40 +0000 (08:00 -0800)
This caused a sigreturn with bad argument on a preemptible kernel
to complain with

Debug: sleeping function called from invalid context at /home/lsrc/quilt/linux/include/linux/rwsem.h:43
in_atomic():0, irqs_disabled():1

Call Trace: {__might_sleep+190} {profile_task_exit+21}
       {__do_exit+34} {do_wait+0}

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/entry.S

index b150c87a08c6b3131909d8af5b567699e58ce098..7c10e9009d611173d13fddf90650a9dfe78ec7db 100644 (file)
@@ -554,6 +554,7 @@ iret_label:
        /* running with kernel gs */
 bad_iret:
        movq $-9999,%rdi        /* better code? */
+       sti
        jmp do_exit                     
        .previous