Hi, all:
Here is a stack trace of winDBG
kd> k
ChildEBP RetAddr
f8a05cc0 806efa86 nt!KiDispatchInterrupt
f8a05cc0 806ef2e7 hal!HalpDispatchInterrupt+0xba
f8a05d38 804dd6bc hal!KfLowerIrql+0x17
f8a05d44 804dd6f2 nt!KiSwapThread+0x68
f8a05d6c f814eed2 nt!KeWaitForSingleObject+0x1c2
f8a05dac 8057efed USBPORT!USBPORT_WorkerThread+0x3c
f8a05ddc 804fb477 nt!PspSystemThreadStartup+0x34
00000000 00000000 nt!KiThreadStartup+0x16
hal!KfLowerIrql:
806ef2d0 33c0 xor eax,eax
806ef2d2 8ac1 mov al,cl
806ef2d4 33c9 xor ecx,ecx
806ef2d6 8a8858f26e80 mov cl,byte ptr hal!HalpIRQLtoTPR
(806ef258)[eax]
806ef2dc 890d8000feff mov dword ptr ds:[0FFFE0080h],ecx
806ef2e2 a18000feff mov eax,dword ptr ds:[FFFE0080h]
806ef2e7 c3 ret
hal!KfLowerIrql doesn’t call hal!HalpDispatchInterrupt directly, so what
happened after
mov eax,dword ptr ds:[FFFE0080h]
instruction?
I know this is a silly question, but I still cannot understand the
software interrupt mechanism.
Because KfLowerIrql code is currently running on the processor, other
code will not be execute (on a UP system) until
Context switch or other hardware interrupt. Is this right? Why the
proccessor know there is a software intterrupt request and
process it ?
Thanks for all replies.
-A