summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--UefiCpuPkg/Library/MpInitLib/MpLib.c18
-rw-r--r--UefiCpuPkg/Library/MpInitLib/MpLib.h5
2 files changed, 12 insertions, 11 deletions
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
index c82b985943..ff09a0e9e7 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -696,7 +696,7 @@ ApWakeupFunction (
}
}
}
- SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateFinished);
+ SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateIdle);
}
}
@@ -1352,18 +1352,17 @@ CheckThisAP (
CpuData = &CpuMpData->CpuData[ProcessorNumber];
//
- // Check the CPU state of AP. If it is CpuStateFinished, then the AP has finished its task.
+ // Check the CPU state of AP. If it is CpuStateIdle, then the AP has finished its task.
// Only BSP and corresponding AP access this unit of CPU Data. This means the AP will not modify the
- // value of state after setting the it to CpuStateFinished, so BSP can safely make use of its value.
+ // value of state after setting the it to CpuStateIdle, so BSP can safely make use of its value.
//
//
// If the AP finishes for StartupThisAP(), return EFI_SUCCESS.
//
- if (GetApState(CpuData) == CpuStateFinished) {
+ if (GetApState(CpuData) == CpuStateIdle) {
if (CpuData->Finished != NULL) {
*(CpuData->Finished) = TRUE;
}
- SetApState (CpuData, CpuStateIdle);
return EFI_SUCCESS;
} else {
//
@@ -1420,14 +1419,13 @@ CheckAllAPs (
CpuData = &CpuMpData->CpuData[ProcessorNumber];
//
- // Check the CPU state of AP. If it is CpuStateFinished, then the AP has finished its task.
+ // Check the CPU state of AP. If it is CpuStateIdle, then the AP has finished its task.
// Only BSP and corresponding AP access this unit of CPU Data. This means the AP will not modify the
- // value of state after setting the it to CpuStateFinished, so BSP can safely make use of its value.
+ // value of state after setting the it to CpuStateIdle, so BSP can safely make use of its value.
//
- if (GetApState(CpuData) == CpuStateFinished) {
+ if (GetApState(CpuData) == CpuStateIdle) {
CpuMpData->RunningCount ++;
CpuMpData->CpuData[ProcessorNumber].Waiting = FALSE;
- SetApState(CpuData, CpuStateIdle);
//
// If in Single Thread mode, then search for the next waiting AP for execution.
@@ -1923,7 +1921,7 @@ SwitchBSPWorker (
//
// Wait for old BSP finished AP task
//
- while (GetApState (&CpuMpData->CpuData[CallerNumber]) != CpuStateFinished) {
+ while (GetApState (&CpuMpData->CpuData[CallerNumber]) != CpuStateIdle) {
CpuPause ();
}
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h
index 9d0b866d09..b3a38b4ce7 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.h
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h
@@ -81,11 +81,14 @@ typedef enum {
//
// AP state
//
+// The state transitions for an AP when it process a procedure are:
+// Idle ----> Ready ----> Busy ----> Idle
+// [BSP] [AP] [AP]
+//
typedef enum {
CpuStateIdle,
CpuStateReady,
CpuStateBusy,
- CpuStateFinished,
CpuStateDisabled
} CPU_STATE;