Currently, MpInitLib will program AP stack in dynamic address. Each processor will calculate its stack address by adding stack size based on the last stack address. That means AP may have the different stack address everytime it is wakeup by INIT-SIPI-SIPI.
When all APs have wakeup to execute AP task, each each has been assigned one stack address. Once the timeout happened on some of APs, BSP will send INIT- SIPI-SIPI to wake up APs. We need to re-assign stack for APs. Based on the current implementation, we might assign one stack address used by other APs. It will cause the unexpected stack overlapped issue. This fix changed the stack assignment policy. We will record the stack address assigned to AP at first time AP wakeup. When AP failed on AP task, BSP could reassigned the same stack for it. Cc: Feng Tian <feng.t...@intel.com> Cc: Hao Wu <hao.a...@intel.com> Cc: Michael D Kinney <michael.d.kin...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff....@intel.com> Jeff Fan (6): UefiCpuPkg/MpInitLib: Fixed offset error on Cr3Location UefiCpuPkg/MpInitLib: Force sending INIT-SIPI-SIPI to reset APs UefiCpuPkg/MpInitLib: Remove CPU information from CPU_AP_DATA UefiCpuPkg/MpInitLib: Add InitFlag and CpuInfo in MP_CPU_EXCHANGE_INFO UefiCpuPkg/MpInitLib: Program AP stack in fixed address UefiCpuPkg/MpInitLib: Update AP information when BSP switched UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc | 4 +- UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm | 65 +++++++++++++++--- UefiCpuPkg/Library/MpInitLib/MpLib.c | 95 +++++++++++++++----------- UefiCpuPkg/Library/MpInitLib/MpLib.h | 7 +- UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc | 4 +- UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 68 ++++++++++++++---- 6 files changed, 176 insertions(+), 67 deletions(-) -- 2.9.3.windows.2 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel