xref: /reactos/ntoskrnl/ke/freeze.c (revision e1ef0787)
1 /*
2  * PROJECT:         ReactOS Kernel
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * FILE:            ntoskrnl/ke/freeze.c
5  * PURPOSE:         Routines for freezing and unfreezing processors for
6  *                  kernel debugger synchronization.
7  * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
8  */
9 
10 /* INCLUDES *******************************************************************/
11 
12 #include <ntoskrnl.h>
13 #define NDEBUG
14 #include <debug.h>
15 
16 /* GLOBALS ********************************************************************/
17 
18 /* Freeze data */
19 KIRQL KiOldIrql;
20 ULONG KiFreezeFlag;
21 
22 /* FUNCTIONS ******************************************************************/
23 
24 BOOLEAN
25 NTAPI
26 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
27                   IN PKEXCEPTION_FRAME ExceptionFrame)
28 {
29     BOOLEAN Enable;
30 
31     /* Disable interrupts and get previous state */
32     Enable = KeDisableInterrupts();
33 
34     /* Save freeze flag */
35     KiFreezeFlag = 4;
36 
37     /* Save the old IRQL */
38     KiOldIrql = KeGetCurrentIrql();
39 
40     /* Return whether interrupts were enabled */
41     return Enable;
42 }
43 
44 VOID
45 NTAPI
46 KeThawExecution(IN BOOLEAN Enable)
47 {
48     /* Cleanup CPU caches */
49     KeFlushCurrentTb();
50 
51     /* Re-enable interrupts */
52     if (Enable) _enable();
53 }
54