audk/UefiCpuPkg/Library
Jian J Wang f32bfe6d06 UefiCpuPkg/MpInitLib: split wake up buffer into two parts
If PcdDxeNxMemoryProtectionPolicy is set to enable protection for memory
of EfiBootServicesCode, EfiConventionalMemory, the BIOS will hang at a page
fault exception during MP initialization.

The root cause is that the AP wake up buffer, which is below 1MB and used
to hold both AP init code and data, is type of EfiConventionalMemory (not
really allocated because of potential conflict with legacy code), and is
marked as non-executable. During the transition from real address mode
to long mode, the AP init code has to enable paging which will then cause
itself a page fault exception because it's just running in non-executable
memory.

The solution is splitting AP wake up buffer into two part: lower part is
still below 1MB and shared with legacy system, higher part is really
allocated memory of BootServicesCode type. The init code in the memory
below 1MB will not enable paging but just switch to protected mode and
jump to higher memory, in which the init code will enable paging and
switch to long mode.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jian J Wang <jian.j.wang@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
2018-01-18 17:03:22 +08:00
..
BaseUefiCpuLib UefiCpuPkg/BaseUefiCpuLib.inf: Remove unnecessary library class. 2017-08-16 16:16:18 +08:00
BaseXApicLib UefiCpuPkg: ApicLib 2017-09-05 13:03:22 +08:00
BaseXApicX2ApicLib UefiCpuPkg: ApicLib 2017-09-05 13:03:22 +08:00
CpuCommonFeaturesLib UefiCpuPkg: Enhance feature dependency check 2018-01-15 15:39:50 +08:00
CpuExceptionHandlerLib UefiCpuPkg: Update CpuExceptionHandlerLib pass XCODE5 tool chain 2018-01-16 23:42:48 +08:00
MpInitLib UefiCpuPkg/MpInitLib: split wake up buffer into two parts 2018-01-18 17:03:22 +08:00
MtrrLib UefiCpuPkg/MtrrLib: Fix an assertion bug 2018-01-11 10:37:56 +08:00
PlatformSecLibNull
RegisterCpuFeaturesLib UefiCpuPkg: Delete redundant PcdGetSize PcdCpuFeaturesSupport 2017-12-27 15:31:33 +08:00
SecPeiDxeTimerLibUefiCpu
SmmCpuFeaturesLib UefiCpuPkg: Update SmmCpuFeatureLib pass XCODE5 tool chain 2018-01-16 23:42:58 +08:00
SmmCpuPlatformHookLibNull