Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
title "Interprocessor Interrupts" ;++ ; ; Copyright (c) 2000 Microsoft Corporation ; ; Module Name: ; ; intipi.asm ; ; Abstract: ; ; This module implements the code necessary to process interprocessor ; interrupt requests. ; ; Author: ; ; David N. Cutler (davec) 1-Sep-2000 ; ; Environment: ; ; Kernel mode only. ; ;--
include ksamd64.inc
extern KiFreezeTargetExecution:proc extern KiIpiProcessRequests:proc
subttl "Interprocess Interrupt Service Routine" ;++ ; ; VOID ; KeIpiInterrupt ( ; IN PKTRAP_FRAME TrapFrame ; ) ; ; Routine Description: ; ; This routine is entered as the result of an interprocessor interrupt. ; It processes all interrupt immediate and packet requests. ; ; Arguments: ; ; TrapFrame (rcx) - Supplies a pointer to a trap frame. ; ; Return Value: ; ; None. ; ;--
IiFrame struct P1Home dq ? ; trap frame parameter Iiframe ends
NESTED_ENTRY KeIpiInterrupt, _TEXT$00
alloc_stack (sizeof IiFrame) ; allocate stack frame
END_PROLOGUE
mov IiFrame.P1Home[rsp], rcx ; save trap frame address
; ; Process all interprocessor requests except for freeze execution requests. ;
call KiIpiProcessRequests ; process interprocessor requests and eax, IPI_FREEZE ; check if freeze execution requested jz short KiII10 ; if z, freeze execution not requested
; ; Freeze target execution. ; ; N.B. A intermediary routine is used to freeze the target execution to ; enable the construction of an exception record. ;
mov rcx, IiFrame.P1Home[rsp] ; set trap frame address call KiFreezeCurrentProcessor ; freeze current processor KiII10: add rsp, sizeof IiFrame ; deallocate stack frame ret ; return
NESTED_END KeIpiInterrupt, _TEXT$00
subttl "Freeze Current Processor" ;++ ; ; VOID ; KiFreezeCurrentProcessor ( ; IN PKTRAP_FRAME TrapFrame ; ) ; ; Routine Description: ; ; This routine constructs and exception frame and freezes the execution ; of the current processor. ; ; Arguments: ; ; TrapFrame (rcx) - Supplies a pointer to a trap frame. ; ; Return Value: ; ; None. ; ;--
NESTED_ENTRY KiFreezeCurrentProcessor, _TEXT$00
GENERATE_EXCEPTION_FRAME ; generate exception frame
mov rdx, rsp ; set address of exception frame call KiFreezeTargetExecution ; freeze current processor execution
RESTORE_EXCEPTION_STATE ; restore exception state/deallocate
ret ; return
NESTED_END KiFreezeCurrentProcessor, _TEXT$00
end
|