audk/UefiCpuPkg/Library/MpInitLib
Yuanhao Xie 74c687cc2f UefiCpuPkg/MpInitLib: Wait for all APs to finish initialization
Aim:
- To solve the assertion that checks if CpuMpData->FinishedCount
equals (CpuMpData->CpuCount - 1). The assertion arises from a timing
discrepancy between the BSP's completion of startup signal checks and
the APs' incrementation of the FinishedCount.
- This patch also ensures that "finished" reporting from the APs is as
later as possible.

More specifially:

In the SwitchApContext() function, the BSP trigers
the startup signal and check whether the APs have received it. After
completing this check, the BSP then verifies if the FinishedCount is
equal to CpuCount-1.

On the AP side, upon receiving the startup signal, they invoke
SwitchContextPerAp() and increase the FinishedCount to indicate their
activation. However, even when all APs have received the startup signal,
they might not have finished incrementing the FinishedCount. This timing
gap results in the triggering of the assertion.

Solution:
Instead of assertion, use while loop to waits until all the APs have
incremented the FinishedCount.

Fixes: 964a4f032d

Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Message-Id: <20231025114216.2824-1-yuanhao.xie@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
2023-10-26 17:43:03 +00:00
..
Ia32 UefiCpuPkg: ApWakeupFunction directly use CpuMpData. 2023-07-11 02:47:27 +00:00
X64 UefiCpuPkg: ApWakeupFunction directly use CpuMpData. 2023-07-11 02:47:27 +00:00
AmdSev.c UefiCpuPkg: Create MpHandOff. 2023-07-11 02:47:27 +00:00
DxeMpInitLib.inf UefiCpuPkg: Add PcdFirstTimeWakeUpAPsBySipi 2023-08-14 14:40:41 +00:00
DxeMpInitLib.uni UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
DxeMpLib.c UefiCpuPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
Microcode.c UefiCpuPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
MpEqu.inc UefiCpuPkg: Rename AsmRelocateApLoopStart. 2023-03-07 08:14:59 +00:00
MpHandOff.h UefiCpuPkg: Create MpHandOff. 2023-07-11 02:47:27 +00:00
MpLib.c UefiCpuPkg/MpInitLib: Wait for all APs to finish initialization 2023-10-26 17:43:03 +00:00
MpLib.h UefiCpuPkg: Eliminate the second INIT-SIPI-SIPI sequence. 2023-07-11 02:47:27 +00:00
PeiMpInitLib.inf UefiCpuPkg: Add PcdFirstTimeWakeUpAPsBySipi 2023-08-14 14:40:41 +00:00
PeiMpInitLib.uni UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
PeiMpLib.c UefiCpuPkg: Create MpHandOff. 2023-07-11 02:47:27 +00:00