From 52643c6385c6c2d3d48fecb7da58d254b5ec743d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=F6rn=20Steinbrink?= Date: Sun, 25 Jun 2006 16:24:40 +0200 Subject: [PATCH] --- yaml --- r: 30135 b: refs/heads/master c: a5d157e0675ac11188a8d429a062b1938bb2d353 h: refs/heads/master i: 30133: 62599fb6860d2f96ea501586eb39ddcc2a4b9431 30131: fe9a691755984ae0ab9fad777bec41c725681ca2 30127: 38ff5db7641e52f36c8dbb62b6b40e0cda16812b v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/irq.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8a4411720119..aa440ac3ea4e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1d77062b1402aef5b26e1d3776991126e8026bde +refs/heads/master: a5d157e0675ac11188a8d429a062b1938bb2d353 diff --git a/trunk/arch/i386/kernel/irq.c b/trunk/arch/i386/kernel/irq.c index 248e922ee13a..49ce4c31b713 100644 --- a/trunk/arch/i386/kernel/irq.c +++ b/trunk/arch/i386/kernel/irq.c @@ -95,6 +95,14 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) irqctx->tinfo.task = curctx->tinfo.task; irqctx->tinfo.previous_esp = current_stack_pointer; + /* + * Copy the softirq bits in preempt_count so that the + * softirq checks work in the hardirq context. + */ + irqctx->tinfo.preempt_count = + irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK | + curctx->tinfo.preempt_count & SOFTIRQ_MASK; + asm volatile( " xchgl %%ebx,%%esp \n" " call __do_IRQ \n"