Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/initcpu.c
Show First 20 Lines • Show All 307 Lines • ▼ Show 20 Lines | initializecpu(void) | ||||
} else { | } else { | ||||
if (cpu_stdext_feature & CPUID_STDEXT_SMEP) | if (cpu_stdext_feature & CPUID_STDEXT_SMEP) | ||||
cr4 |= CR4_SMEP; | cr4 |= CR4_SMEP; | ||||
if (cpu_stdext_feature & CPUID_STDEXT_SMAP) | if (cpu_stdext_feature & CPUID_STDEXT_SMAP) | ||||
cr4 |= CR4_SMAP; | cr4 |= CR4_SMAP; | ||||
} | } | ||||
load_cr4(cr4); | load_cr4(cr4); | ||||
/* Reload cpu ext features to reflect cr4 changes */ | /* Reload cpu ext features to reflect cr4 changes */ | ||||
if (IS_BSP()) | if (IS_BSP() && cold) | ||||
identify_cpu_ext_features(); | identify_cpu_ext_features(); | ||||
if (IS_BSP() && (amd_feature & AMDID_NX) != 0) { | if (IS_BSP() && (amd_feature & AMDID_NX) != 0) { | ||||
msr = rdmsr(MSR_EFER) | EFER_NXE; | msr = rdmsr(MSR_EFER) | EFER_NXE; | ||||
wrmsr(MSR_EFER, msr); | wrmsr(MSR_EFER, msr); | ||||
pg_nx = PG_NX; | pg_nx = PG_NX; | ||||
} | } | ||||
hw_ibrs_recalculate(false); | hw_ibrs_recalculate(false); | ||||
hw_ssb_recalculate(false); | hw_ssb_recalculate(false); | ||||
▲ Show 20 Lines • Show All 52 Lines • Show Last 20 Lines |