EmulatorPkg/MpService: Check Processor State when Set Procedure

Due to the state of processor could be set blocked by SingleThread
parameter, so we ought to add a READY state check, only let
the processor in READY state to invoke procedure.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16185 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/EmulatorPkg/CpuRuntimeDxe/MpService.c b/EmulatorPkg/CpuRuntimeDxe/MpService.c
index 866028b..5ddd4e7 100644
--- a/EmulatorPkg/CpuRuntimeDxe/MpService.c
+++ b/EmulatorPkg/CpuRuntimeDxe/MpService.c
@@ -465,7 +465,13 @@
         continue;

       }

 

-      SetApProcedure (ProcessorData, Procedure, ProcedureArgument);

+      gThread->MutexLock (ProcessorData->StateLock);

+      ProcessorState = ProcessorData->State;

+      gThread->MutexUnlock (ProcessorData->StateLock);

+

+      if (ProcessorState == CPU_STATE_READY) {

+        SetApProcedure (ProcessorData, Procedure, ProcedureArgument);

+      }

     }

 

     //