On Tue, 31 Jul 2007, liujun wrote:
[ ... ]
Why the intr_thread stack frames is live in mppLnx_dpc_handler threads stack at
this point.
Because interrupts, even low-level interrupts like the disk interrupt in
your case, when first dispatched, will first run on the stack of whatever
was active at the point of the interrupt occurring.
Only when/if the interrupt handler passivates, i.e. calls a function that
would block, for example mutex_enter() on a held mutex where the owner has
gone sleeping, only then will the interrupt passivate and switch to an
interrupt stack. This hasn't happened (yet) in the case you've shown. And
often enough, it doesn't happen at all - in the end, interrupt handlers
are supposed to do their work quickly and effectively, without the need to
passivate.
Running the interrupt handler on the stack of whatever kernel thread was
active at that point gains performance - no cycles wasted on switching
stacks, no TLB miss for the new stackpage. That's also why high-level
interrupts never passivate.
What you see is perfectly normal. Well, apart from the assertion failure,
but that can't be "blamed" on the behaviour of interrupt dispatch. Rather,
if the above behaviour of interrupt dispatch causes this failure of your
driver, then your driver has a bug.
FrankH.
Thank your!!
This message posted from opensolaris.org