spin_lock already locked error

Ken Steele kls at pt.com
Thu Mar 15 19:54:39 UTC 2007


I'm seeing a spin_lock error running the latest Red Hat EL 4 ( 
2.6.9-42.0.10.EL ) on a uniprocessor AMD x86_64 machine.  I have verified 
that CONFIG_PREEMPT and CONFIG_SMP are not defined.  I use a global 
spin_lock ( spin_lock_irqsave / spin_lock_irqrestore ) in the ISR routine 
and several other functions.  While executing in one of the functions, the 
ISR routine is called and we get an error that the spin_lock is already 
locked ( shown below ):

*** MUTEX_ENTER ***
***TRY_ISR_ENTER ** 
Kernel panic - not syncing: 
/work/ken/drivers/mps/drv/Linux/mps_linux.c:853: 
spin_lock(/work/ken/drivers/mps/drv/Linux/mps_linux.c:ffffffffa0337240) 
already locked by /work/ken/drivers/mps/drv/Linux/mps_ioctl.c/1034
Badness in panic at kernel/panic.c:117


I have read many places that on a uniprocessor machine with CONFIG_PREEMPT 
not defined, that spin_lock_irqsave reduces to just disabling interrupts. 
What I am seeing here is that not only is spin_lock_irqsave not disabling 
interrupts ( we get in the ISR routine in the middle of executing another 
function ) it also checks to see if the spin_lock is taken, which is not 
right for the non-preemptive kernel.  Any ideas as to what is going on? 
This same code works fine in an SMP environment.


More information about the redhat-list mailing list