Joachim Worringen wrote:
> Joachim Worringen schrieb:
>> Greetings,
>>
>> we are writing a stack of layered kernel modules (actually, port it from 
>> Linux), with a hardware-handling driver at the bottom (call it A), and a 
>> module B that calls down into A. Next to this, A does upcalls into B.
>>
>> A softint handler "si_B" (created and triggered) within B is waiting by 
>> blocking on a sema_p(). The correspondig sema_v() is to be performed 
>> within an upcall of a softint handler "si_A". si_A was created within A, 
>> and triggered there from a hard interrupt (level 12). Both handlers si_A 
>> and si_B have the same max. softint priority.
> 
> Ok, seems I have to reply myself... Creating si_B with the min. softint 
> priority fixed the problem. It seems that the softints of the same 
> priority are actually executed strictly sequentially.

One more followup, reading man pages from top to bottom is recommended 
;-) (from semaphore(9f)):
      If sema_p() is used from interrupt  context,  lower-priority
      interrupts  will not be serviced during the wait. This means
      that if the thread that will eventually perform the sema_v()
      becomes blocked on anything that requires the lower-priority
      interrupt, the system will hang.

  Joachim

-- 
Joachim Worringen, Software Architect, Dolphin Interconnect Solutions
phone ++49/(0)228/324 08 17 - http://www.dolphinics.com
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to