cvs commit: src/sys/dev/scc scc_core.c

John Baldwin john at baldwin.cx
Mon Jul 24 22:38:40 UTC 2006


On Monday 24 July 2006 18:25, Marcel Moolenaar wrote:
> marcel      2006-07-24 22:25:16 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/dev/scc          scc_core.c 
>   Log:
>   If we have multiple interrupt resources, like for Z8530 clones on the
>   mac-io bus, we cannot setup FAST interrupt handlers. This because we
>   use spinlocks to protect the hardware and all interrupt resources are
>   assigned the same interrupt handler. When the interrupt handler is
>   invoked for interrupt X, it could be preempted for interrupt Y while
>   it was holding the lock (where X and Y are the interrupt resources
>   corresponding a single instance of this driver). This is a deadlock.
>   By only using a MPSAFE handler in that case we prevent preemption.

Umm, if you have interrupts preempting a spin lock you are going to have a lot 
more problems. :(  spinlock_enter() is supposed to either block or defer any 
interrupts that could try to acquire a spin lock or interfere with a held 
spin lock until spinlock_exit().

-- 
John Baldwin


More information about the cvs-src mailing list