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

Marcel Moolenaar marcel at xcllnt.net
Mon Jul 24 23:37:45 UTC 2006


On Jul 24, 2006, at 3:38 PM, John Baldwin wrote:

> 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().

Doh! You're right. I think I got confused with critical regions.
Thanks for pointing it out.

-- 
  Marcel Moolenaar         USPA: A-39004          marcel at xcllnt.net




More information about the cvs-src mailing list