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 > _______________________________________________ > mdb-discuss mailing list > mdb-discuss at opensolaris.org >