diff options
author | Christophe Saout <christophe@saout.de> | 2005-03-28 15:43:57 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-03-28 15:43:57 -0800 |
commit | 654ebdefc23e87ad73c8087fae3f9d1d73fd7682 (patch) | |
tree | ace36ddf13c7075d372ab2776567c31834c864af | |
parent | 19118d91bd8d55767158343e13f38dd3d39b1367 (diff) | |
download | history-654ebdefc23e87ad73c8087fae3f9d1d73fd7682.tar.gz |
[PATCH] x86-64: Fix preemption off of irq context with PREEMPT_BKL
Fixing the interrupt tst for CONFIG_PREEMPT on x86-64 exposes another
bug with CONFIG_PREEMPT_BKL. Calling schedule due to preemption
releases the BKL which it shouldn't do.
Call preempt_schedule_irq instead (like for i386). This fixes the
easily reproducible filesystem errors I've seen (with reiserfs, which
heavily relies on the BKL).
Signed-off-by: Christophe Saout <christophe@saout.de>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/x86_64/kernel/entry.S | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S index e38b68191e360..e126284db7a84 100644 --- a/arch/x86_64/kernel/entry.S +++ b/arch/x86_64/kernel/entry.S @@ -517,12 +517,7 @@ retint_kernel: jnc retint_restore_args bt $9,EFLAGS-ARGOFFSET(%rsp) /* interrupts off? */ jnc retint_restore_args - movl $PREEMPT_ACTIVE,threadinfo_preempt_count(%rcx) - sti - call schedule - cli - GET_THREAD_INFO(%rcx) - movl $0,threadinfo_preempt_count(%rcx) + call preempt_schedule_irq jmp exit_intr #endif CFI_ENDPROC |