ReactOS 0.4.16-dev-106-g10b08aa
context.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: ntoskrnl/ke/i386/context.c
5 * PURPOSE: Context Switching Related Code
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9/* INCLUDES *******************************************************************/
10
11#include <ntoskrnl.h>
12#define NDEBUG
13#include <debug.h>
14
15/* GLOBALS ********************************************************************/
16
17/* FUNCTIONS ******************************************************************/
18
19VOID
22 IN PKPROCESS OldProcess)
23{
24 PKIPCR Pcr = (PKIPCR)KeGetPcr();
25#ifdef CONFIG_SMP
26 LONG SetMember;
27
28 /* Update active processor mask */
29 SetMember = (LONG)Pcr->SetMember;
30 InterlockedXor((PLONG)&NewProcess->ActiveProcessors, SetMember);
31 InterlockedXor((PLONG)&OldProcess->ActiveProcessors, SetMember);
32#endif
33
34 /* Check for new LDT */
35 if (NewProcess->LdtDescriptor.LimitLow != OldProcess->LdtDescriptor.LimitLow)
36 {
37 if (NewProcess->LdtDescriptor.LimitLow)
38 {
40 ((PULONG)&NewProcess->LdtDescriptor)[0],
41 ((PULONG)&NewProcess->LdtDescriptor)[1]);
42 Ke386SetLocalDescriptorTable(KGDT_LDT);
43 }
44 else
45 {
46 Ke386SetLocalDescriptorTable(0);
47 }
48 }
49
50 /* Update CR3 */
51 __writecr3(NewProcess->DirectoryTableBase[0]);
52
53 /* Clear GS */
54 Ke386SetGs(0);
55
56 /* Update IOPM offset */
57 Pcr->TSS->IoMapBase = NewProcess->IopmOffset;
58}
59
#define InterlockedXor
Definition: interlocked.h:266
__INTRIN_INLINE void __writecr3(unsigned int Data)
Definition: intrin_x86.h:1794
VOID KeSetGdtSelector(ULONG Entry, ULONG Value1, ULONG Value2)
Definition: ldt.c:107
struct _KIPCR * PKIPCR
#define KeGetPcr()
Definition: ketypes.h:81
#define KGDT_LDT
Definition: ketypes.h:131
VOID NTAPI KiSwapProcess(IN PKPROCESS NewProcess, IN PKPROCESS OldProcess)
Definition: context.c:21
long LONG
Definition: pedump.c:60
KAFFINITY SetMember
Definition: ketypes.h:817
struct _KTSS * TSS
Definition: ketypes.h:814
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
#define IN
Definition: typedefs.h:39
int32_t * PLONG
Definition: typedefs.h:58