aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Saout <christophe@saout.de>2005-03-28 15:43:57 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-03-28 15:43:57 -0800
commit654ebdefc23e87ad73c8087fae3f9d1d73fd7682 (patch)
treeace36ddf13c7075d372ab2776567c31834c864af
parent19118d91bd8d55767158343e13f38dd3d39b1367 (diff)
downloadhistory-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.S7
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