Revision: 16415
http://sourceforge.net/p/edk2/code/16415
Author: jljusten
Date: 2014-11-21 22:46:26 +0000 (Fri, 21 Nov 2014)
Log Message:
-----------
EmulatorPkg/MpService: fix wrong unsigned to signed variable transition
Because TimeoutInMicrosecsond is a unsigned value, converting it to
signed value will cause the data region changed. so this patch fix
that.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Modified Paths:
--------------
trunk/edk2/EmulatorPkg/CpuRuntimeDxe/MpService.c
Modified: trunk/edk2/EmulatorPkg/CpuRuntimeDxe/MpService.c
===================================================================
--- trunk/edk2/EmulatorPkg/CpuRuntimeDxe/MpService.c 2014-11-21 09:40:47 UTC
(rev 16414)
+++ trunk/edk2/EmulatorPkg/CpuRuntimeDxe/MpService.c 2014-11-21 22:46:26 UTC
(rev 16415)
@@ -111,8 +111,31 @@
return EFI_NOT_FOUND;
}
+/**
+ * Calculated and stalled the interval time by BSP to check whether
+ * the APs have finished.
+ *
+ * @param[in] Timeout The time limit in microseconds for
+ * APs to return from Procedure.
+ *
+ * @retval StallTime Time of execution stall.
+**/
+UINTN
+CalculateAndStallInterval (
+ IN UINTN Timeout
+ )
+{
+ UINTN StallTime;
+ if (Timeout < gPollInterval && Timeout != 0) {
+ StallTime = Timeout;
+ } else {
+ StallTime = gPollInterval;
+ }
+ gBS->Stall (StallTime);
+ return StallTime;
+}
/**
This service retrieves the number of logical processor in the platform
@@ -378,7 +401,7 @@
UINTN NextNumber;
PROCESSOR_STATE APInitialState;
PROCESSOR_STATE ProcessorState;
- INTN Timeout;
+ UINTN Timeout;
if (!IsBSP ()) {
@@ -540,13 +563,12 @@
goto Done;
}
- if ((TimeoutInMicroseconds != 0) && (Timeout < 0)) {
+ if ((TimeoutInMicroseconds != 0) && (Timeout == 0)) {
Status = EFI_TIMEOUT;
goto Done;
}
- gBS->Stall (gPollInterval);
- Timeout -= gPollInterval;
+ Timeout -= CalculateAndStallInterval (Timeout);
}
Done:
@@ -659,7 +681,7 @@
OUT BOOLEAN *Finished OPTIONAL
)
{
- INTN Timeout;
+ UINTN Timeout;
if (!IsBSP ()) {
return EFI_DEVICE_ERROR;
@@ -717,12 +739,11 @@
gThread->MutexUnlock (gMPSystem.ProcessorData[ProcessorNumber].StateLock);
- if ((TimeoutInMicroseconds != 0) && (Timeout < 0)) {
+ if ((TimeoutInMicroseconds != 0) && (Timeout == 0)) {
return EFI_TIMEOUT;
}
- gBS->Stall (gPollInterval);
- Timeout -= gPollInterval;
+ Timeout -= CalculateAndStallInterval (Timeout);
}
return EFI_SUCCESS;
@@ -987,7 +1008,7 @@
BOOLEAN Found;
if (gMPSystem.TimeoutActive) {
- gMPSystem.Timeout -= gPollInterval;
+ gMPSystem.Timeout -= CalculateAndStallInterval (gMPSystem.Timeout);
}
for (ProcessorNumber = 0; ProcessorNumber < gMPSystem.NumberOfProcessors;
ProcessorNumber++) {
@@ -1040,7 +1061,7 @@
}
}
- if (gMPSystem.TimeoutActive && gMPSystem.Timeout < 0) {
+ if (gMPSystem.TimeoutActive && gMPSystem.Timeout == 0) {
//
// Timeout
//
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits