From: Jeff Fan Date: Sat, 2 Jul 2016 03:55:58 +0000 (+0800) Subject: UefiCpuPkg/PiSmmCpuDxeSmm: Check XD/BTS features in SMM relocation X-Git-Tag: edk2-stable201903~6301 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=a46a4c90d33dc7397b0f6f187008cbc385a1e051 UefiCpuPkg/PiSmmCpuDxeSmm: Check XD/BTS features in SMM relocation CheckProcessorFeature() invokes MpService->StartupAllAps() to detect XD/BTS features on normal boot path. It's not necessary and may cause performance impact, because INIT-SIPI-SIPI must be sent to APs if APs are in hlt-loop mode. XD/BTS feature detection is moved to SmmInitHandler() in SMM relocation during normal boot path. Cc: Michael Kinney Cc: Feng Tian Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan Reviewed-by: Feng Tian Reviewed-by: Michael Kinney Regression-tested-by: Laszlo Ersek --- diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c index db36a0ad3c..50059e4241 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c @@ -355,6 +355,13 @@ SmmInitHandler ( &mCpuHotPlugData ); + if (!mSmmS3Flag) { + // + // Check XD and BTS features on each processor on normal boot + // + CheckFeatureSupported (NULL); + } + if (mIsBsp) { // // BSP rebase is already done above. @@ -1191,11 +1198,6 @@ PiCpuSmmEntry ( } } - // - // Check XD and BTS features - // - CheckProcessorFeature (); - // // Initialize SMM Profile feature // diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c index f9cea55d9d..d315194dfc 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c @@ -32,7 +32,7 @@ UINTN mMsrDsAreaSize = SMM_PROFILE_DTS_SIZE; // // The flag indicates if execute-disable is supported by processor. // -BOOLEAN mXdSupported = FALSE; +BOOLEAN mXdSupported = TRUE; // // The flag indicates if execute-disable is enabled on processor. @@ -42,7 +42,7 @@ BOOLEAN mXdEnabled = FALSE; // // The flag indicates if BTS is supported by processor. // -BOOLEAN mBtsSupported = FALSE; +BOOLEAN mBtsSupported = TRUE; // // The flag indicates if SMM profile starts to record data.