summaryrefslogtreecommitdiff
path: root/UefiCpuPkg/CpuDxe/CpuMp.c
diff options
context:
space:
mode:
Diffstat (limited to 'UefiCpuPkg/CpuDxe/CpuMp.c')
-rw-r--r--UefiCpuPkg/CpuDxe/CpuMp.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c
index 25b6fcb056..25c909193e 100644
--- a/UefiCpuPkg/CpuDxe/CpuMp.c
+++ b/UefiCpuPkg/CpuDxe/CpuMp.c
@@ -1176,11 +1176,14 @@ ProcessorToIdleState (
}
//
- // Avoid forcibly reset AP caused the AP State is not updated.
+ // Avoid forcibly reset AP caused the timeout AP State is not
+ // updated.
//
GetMpSpinLock (CpuData);
+ if (CpuData->State == CpuStateBusy) {
+ CpuData->Procedure = NULL;
+ }
CpuData->State = CpuStateIdle;
- CpuData->Procedure = NULL;
ReleaseMpSpinLock (CpuData);
while (TRUE) {
@@ -1190,6 +1193,8 @@ ProcessorToIdleState (
ReleaseMpSpinLock (CpuData);
if (Procedure != NULL) {
+ SetApState (CpuData, CpuStateBusy);
+
Procedure (ProcedureArgument);
GetMpSpinLock (CpuData);