Subject: Re: kern/28541: mi_switch() can deadlock on biglock
To: Manuel Bouyer <Manuel.Bouyer@lip6.fr>
From: Pavel Cahyna <pavel.cahyna@st.mff.cuni.cz>
List: netbsd-bugs
Date: 12/05/2004 22:29:41
> CPU 0:
> acquire
> spinlock_aquire_count
> mi_switch
> ltsleep
> sbwait
> soreceive
> soo_read
> dofileread
> sys_read
> syscall_plain
> 	
> 	CPU0 is trying to aquire again kernel_lock, while CPU1 has it, and tries
> 	to send an IPI to CPU0.
> 	But I don't know how this would prevent CPU0 from receiving an IPI.

Because during whole execution of spinlock_acquire_count, CPU 0 is at
spllock (INTERLOCK_ACQUIRE does spllock) and spllock is defined as
splhigh, which probably blocks IPIs.