In the x86/amd64 module os/intr.c calls to sti()/cli() are made. One of these 
is in dispatch_hardint(). Now if intr_thread_prolog() has been called the 
cpu_intr_actv bitmap is updated according to the current PIL. If 
dispatch_hardint() is then called and it issues sti() then an interrupt is 
allowed to come in. If one of these is at the same PIL then 
intr_thread_prolog() will be called again and it will find the bit in the 
cpu_intr_actv bitmap is already on.

What I'm assuming here is that sti() is allowing all interrupts and ignoring 
the current PIL. I believe this must be a faulty assumption given the fact the 
code works and no assertion is failed. But I'm curious as to (a) what sti() is 
actually doing; (b) why one of the spl() type calls is not used to only allow 
interrupts at a higher level; and (c) why it is necessary to enable interrupts 
at this point anyway?

Neale
 
 
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to