summaryrefslogtreecommitdiff
path: root/EmulatorPkg
diff options
context:
space:
mode:
authorChen Fan <chen.fan.fnst@cn.fujitsu.com>2014-07-31 15:45:27 +0000
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2014-07-31 15:45:27 +0000
commita31a3b4a3e16d10fee4bac2fc56eee24cd1a90a4 (patch)
treeda91c03651b3c7147efd504b5de708a8333d0cea /EmulatorPkg
parent0dd40e14605814cc661da77ae4102c425cc4476c (diff)
downloadedk2-platforms-a31a3b4a3e16d10fee4bac2fc56eee24cd1a90a4.tar.xz
EmulatorPkg/Mpservice: Add StateLock where missing
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@15730 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EmulatorPkg')
-rw-r--r--EmulatorPkg/CpuRuntimeDxe/MpService.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/EmulatorPkg/CpuRuntimeDxe/MpService.c b/EmulatorPkg/CpuRuntimeDxe/MpService.c
index d79abd2989..536a47f7ec 100644
--- a/EmulatorPkg/CpuRuntimeDxe/MpService.c
+++ b/EmulatorPkg/CpuRuntimeDxe/MpService.c
@@ -437,17 +437,17 @@ CpuMpServicesStartupAllAps (
// state 1 by 1, until the previous 1 finished its task
// if not "SingleThread", all APs are put to ready state from the beginning
//
+ gThread->MutexLock(ProcessorData->StateLock);
if (ProcessorData->State == CPU_STATE_IDLE) {
- gMPSystem.StartCount++;
-
- gThread->MutexLock (ProcessorData->StateLock);
ProcessorData->State = APInitialState;
gThread->MutexUnlock (ProcessorData->StateLock);
+ gMPSystem.StartCount++;
if (SingleThread) {
APInitialState = CPU_STATE_BLOCKED;
}
} else {
+ gThread->MutexUnlock (ProcessorData->StateLock);
return EFI_NOT_READY;
}
}
@@ -671,9 +671,12 @@ CpuMpServicesStartupThisAP (
return EFI_INVALID_PARAMETER;
}
+ gThread->MutexLock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (gMPSystem.ProcessorData[ProcessorNumber].State != CPU_STATE_IDLE) {
+ gThread->MutexUnlock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_NOT_READY;
}
+ gThread->MutexUnlock(gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if ((WaitEvent != NULL) && gReadToBoot) {
return EFI_UNSUPPORTED;
@@ -789,9 +792,12 @@ CpuMpServicesSwitchBSP (
}
ASSERT (Index != gMPSystem.NumberOfProcessors);
+ gThread->MutexLock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (gMPSystem.ProcessorData[ProcessorNumber].State != CPU_STATE_IDLE) {
+ gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_NOT_READY;
}
+ gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
// Skip for now as we need switch a bunch of stack stuff around and it's complex
// May not be worth it?
@@ -861,9 +867,12 @@ CpuMpServicesEnableDisableAP (
return EFI_INVALID_PARAMETER;
}
+ gThread->MutexLock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (gMPSystem.ProcessorData[ProcessorNumber].State != CPU_STATE_IDLE) {
+ gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
return EFI_UNSUPPORTED;
}
+ gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
if (EnableAP) {
if ((gMPSystem.ProcessorData[ProcessorNumber].Info.StatusFlag & PROCESSOR_ENABLED_BIT) == 0 ) {
@@ -1019,7 +1028,9 @@ CpuCheckAllAPsStatus (
}
}
+ gThread->MutexLock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
gMPSystem.ProcessorData[ProcessorNumber].State = CPU_STATE_IDLE;
+ gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
gMPSystem.FinishCount++;
break;