Author: tkreuzer
Date: Wed Apr 24 20:28:45 2013
New Revision: 58846

URL: http://svn.reactos.org/svn/reactos?rev=58846&view=rev
Log:
[NTOSKRNL/AMD64]
- Add more required feature bits
- Initialize the PAT MSR
- Enable NX in EFER MSR

Modified:
    trunk/reactos/ntoskrnl/ke/amd64/kiinit.c

Modified: trunk/reactos/ntoskrnl/ke/amd64/kiinit.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/amd64/kiinit.c?rev=58846&r1=58845&r2=58846&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/amd64/kiinit.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/amd64/kiinit.c [iso-8859-1] Wed Apr 24 20:28:45 
2013
@@ -14,7 +14,8 @@
 #include <debug.h>
 
 #define REQUIRED_FEATURE_BITS (KF_RDTSC|KF_CR4|KF_CMPXCHG8B|KF_XMMI|KF_XMMI64| 
\
-                               KF_NX_BIT)
+                               KF_LARGE_PAGE|KF_FAST_SYSCALL|KF_GLOBAL_PAGE| \
+                               KF_CMOV|KF_PAT|KF_MMX|KF_FXSR|KF_NX_BIT)
 
 /* GLOBALS *******************************************************************/
 
@@ -162,6 +163,7 @@
 NTAPI
 KiInitializeCpu(PKIPCR Pcr)
 {
+    ULONG64 Pat;
     ULONG FeatureBits;
 
     /* Initialize gs */
@@ -215,14 +217,19 @@
     __writemsr(MSR_LSTAR, (ULONG64)KiSystemCallEntry64);
     __writemsr(MSR_CSTAR, (ULONG64)KiSystemCallEntry32);
 
-   __writemsr(MSR_STAR, ((ULONG64)KGDT64_R0_CODE << 32) |
-                        ((ULONG64)(KGDT64_R3_CMCODE|RPL_MASK) << 48));
+    __writemsr(MSR_STAR, ((ULONG64)KGDT64_R0_CODE << 32) |
+                         ((ULONG64)(KGDT64_R3_CMCODE|RPL_MASK) << 48));
 
     /* Set the flags to be cleared when doing a syscall */
     __writemsr(MSR_SYSCALL_MASK, EFLAGS_IF_MASK | EFLAGS_TF | EFLAGS_DF);
 
-    /* Enable syscall instruction */
-    __writemsr(MSR_EFER, __readmsr(MSR_EFER) | MSR_SCE);
+    /* Enable syscall instruction and no-execute support */
+    __writemsr(MSR_EFER, __readmsr(MSR_EFER) | MSR_SCE | MSR_NXE);
+
+    /* Initialize the PAT */
+    Pat = (PAT_WB << 0)  | (PAT_WC << 8) | (PAT_UCM << 16) | (PAT_UC << 24) |
+          (PAT_WB << 32) | (PAT_WC << 40) | (PAT_UCM << 48) | (PAT_UC << 56);
+    __writemsr(MSR_PAT, Pat);
 }
 
 VOID


Reply via email to