(Note: Patch also attached because the inline version is certain to get line wrapped.) Rather than blindly re-enabling interrupts in die(), save their state upon entry and then restore that state. Signed-off-by: Jan Beulich <[email protected]> diff -Npru 2.6.13/arch/i386/kernel/traps.c 2.6.13-i386-die-irq/arch/i386/kernel/traps.c --- 2.6.13/arch/i386/kernel/traps.c 2005-08-29 01:41:01.000000000 +0200 +++ 2.6.13-i386-die-irq/arch/i386/kernel/traps.c 2005-09-07 11:39:40.000000000 +0200 @@ -304,6 +304,7 @@ void die(const char * str, struct pt_reg spinlock_t lock; u32 lock_owner; int lock_owner_depth; + unsigned long flags; } die = { .lock = SPIN_LOCK_UNLOCKED, .lock_owner = -1, @@ -313,7 +314,7 @@ void die(const char * str, struct pt_reg if (die.lock_owner != raw_smp_processor_id()) { console_verbose(); - spin_lock_irq(&die.lock); + spin_lock_irqsave(&die.lock, die.flags); die.lock_owner = smp_processor_id(); die.lock_owner_depth = 0; bust_spinlocks(1); @@ -344,7 +345,7 @@ void die(const char * str, struct pt_reg bust_spinlocks(0); die.lock_owner = -1; - spin_unlock_irq(&die.lock); + spin_unlock_irqrestore(&die.lock, die.flags); if (kexec_should_crash(current)) crash_kexec(regs);
Attachment:
linux-2.6.13-i386-die-irq.patch
Description: Binary data
- Follow-Ups:
- Re: [PATCH] fix i386 interrupt re-enabling in die()
- From: Zwane Mwaikambo <[email protected]>
- Re: [PATCH] fix i386 interrupt re-enabling in die()
- Prev by Date: Re: 2.6.13-mm2 high memory support borken?
- Next by Date: Re: [PATCH] rmmod notifier chain
- Previous by thread: [PATCH] fix i386 cmpxchg
- Next by thread: Re: [PATCH] fix i386 interrupt re-enabling in die()
- Index(es):