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
