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