diff options
author | Andi Kleen <ak@suse.de> | 2006-02-16 17:42:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-17 11:00:40 -0500 |
commit | 2391c4b594eb28abd58102de8f4e5d7a4fa39f4c (patch) | |
tree | 0f39ddc11525a757d55e4f02f15377acc035aca9 /arch | |
parent | a62eaf151d9cb478d127cfbc2e93c498869785b0 (diff) |
[PATCH] x86_64: Don't call do_exit with interrupts disabled after IRET exception
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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/entry.S | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index b150c87a08c6..7c10e9009d61 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S | |||
@@ -554,6 +554,7 @@ iret_label: | |||
554 | /* running with kernel gs */ | 554 | /* running with kernel gs */ |
555 | bad_iret: | 555 | bad_iret: |
556 | movq $-9999,%rdi /* better code? */ | 556 | movq $-9999,%rdi /* better code? */ |
557 | sti | ||
557 | jmp do_exit | 558 | jmp do_exit |
558 | .previous | 559 | .previous |
559 | 560 | ||