diff options
Diffstat (limited to 'MdePkg/Library/BaseSynchronizationLib/Synchronization.c')
| -rw-r--r-- | MdePkg/Library/BaseSynchronizationLib/Synchronization.c | 86 |
1 files changed, 45 insertions, 41 deletions
diff --git a/MdePkg/Library/BaseSynchronizationLib/Synchronization.c b/MdePkg/Library/BaseSynchronizationLib/Synchronization.c index 8ea2843c7f8d..4f402b037eed 100644 --- a/MdePkg/Library/BaseSynchronizationLib/Synchronization.c +++ b/MdePkg/Library/BaseSynchronizationLib/Synchronization.c @@ -8,8 +8,8 @@ #include "BaseSynchronizationLibInternals.h" -#define SPIN_LOCK_RELEASED ((UINTN) 1) -#define SPIN_LOCK_ACQUIRED ((UINTN) 2) +#define SPIN_LOCK_RELEASED ((UINTN) 1) +#define SPIN_LOCK_ACQUIRED ((UINTN) 2) /** Retrieves the architecture specific spin lock alignment requirements for @@ -55,7 +55,7 @@ GetSpinLockProperties ( SPIN_LOCK * EFIAPI InitializeSpinLock ( - OUT SPIN_LOCK *SpinLock + OUT SPIN_LOCK *SpinLock ) { ASSERT (SpinLock != NULL); @@ -86,7 +86,7 @@ InitializeSpinLock ( SPIN_LOCK * EFIAPI AcquireSpinLock ( - IN OUT SPIN_LOCK *SpinLock + IN OUT SPIN_LOCK *SpinLock ) { UINT64 Current; @@ -106,7 +106,7 @@ AcquireSpinLock ( // // Get the current timer value // - Current = GetPerformanceCounter(); + Current = GetPerformanceCounter (); // // Initialize local variables @@ -130,23 +130,27 @@ AcquireSpinLock ( if (Cycle < 0) { Cycle = -Cycle; } + Cycle++; while (!AcquireSpinLockOrFail (SpinLock)) { CpuPause (); Previous = Current; - Current = GetPerformanceCounter(); - Delta = (INT64) (Current - Previous); + Current = GetPerformanceCounter (); + Delta = (INT64)(Current - Previous); if (Start > End) { Delta = -Delta; } + if (Delta < 0) { Delta += Cycle; } + Total += Delta; ASSERT (Total < Timeout); } } + return SpinLock; } @@ -170,10 +174,10 @@ AcquireSpinLock ( BOOLEAN EFIAPI AcquireSpinLockOrFail ( - IN OUT SPIN_LOCK *SpinLock + IN OUT SPIN_LOCK *SpinLock ) { - SPIN_LOCK LockValue; + SPIN_LOCK LockValue; ASSERT (SpinLock != NULL); @@ -181,12 +185,12 @@ AcquireSpinLockOrFail ( ASSERT (SPIN_LOCK_ACQUIRED == LockValue || SPIN_LOCK_RELEASED == LockValue); return (BOOLEAN)( - InterlockedCompareExchangePointer ( - (VOID**)SpinLock, - (VOID*)SPIN_LOCK_RELEASED, - (VOID*)SPIN_LOCK_ACQUIRED - ) == (VOID*)SPIN_LOCK_RELEASED - ); + InterlockedCompareExchangePointer ( + (VOID **)SpinLock, + (VOID *)SPIN_LOCK_RELEASED, + (VOID *)SPIN_LOCK_ACQUIRED + ) == (VOID *)SPIN_LOCK_RELEASED + ); } /** @@ -206,10 +210,10 @@ AcquireSpinLockOrFail ( SPIN_LOCK * EFIAPI ReleaseSpinLock ( - IN OUT SPIN_LOCK *SpinLock + IN OUT SPIN_LOCK *SpinLock ) { - SPIN_LOCK LockValue; + SPIN_LOCK LockValue; ASSERT (SpinLock != NULL); @@ -237,7 +241,7 @@ ReleaseSpinLock ( UINT32 EFIAPI InterlockedIncrement ( - IN volatile UINT32 *Value + IN volatile UINT32 *Value ) { ASSERT (Value != NULL); @@ -261,7 +265,7 @@ InterlockedIncrement ( UINT32 EFIAPI InterlockedDecrement ( - IN volatile UINT32 *Value + IN volatile UINT32 *Value ) { ASSERT (Value != NULL); @@ -290,9 +294,9 @@ InterlockedDecrement ( UINT16 EFIAPI InterlockedCompareExchange16 ( - IN OUT volatile UINT16 *Value, - IN UINT16 CompareValue, - IN UINT16 ExchangeValue + IN OUT volatile UINT16 *Value, + IN UINT16 CompareValue, + IN UINT16 ExchangeValue ) { ASSERT (Value != NULL); @@ -321,9 +325,9 @@ InterlockedCompareExchange16 ( UINT32 EFIAPI InterlockedCompareExchange32 ( - IN OUT volatile UINT32 *Value, - IN UINT32 CompareValue, - IN UINT32 ExchangeValue + IN OUT volatile UINT32 *Value, + IN UINT32 CompareValue, + IN UINT32 ExchangeValue ) { ASSERT (Value != NULL); @@ -351,9 +355,9 @@ InterlockedCompareExchange32 ( UINT64 EFIAPI InterlockedCompareExchange64 ( - IN OUT volatile UINT64 *Value, - IN UINT64 CompareValue, - IN UINT64 ExchangeValue + IN OUT volatile UINT64 *Value, + IN UINT64 CompareValue, + IN UINT64 ExchangeValue ) { ASSERT (Value != NULL); @@ -381,9 +385,9 @@ InterlockedCompareExchange64 ( VOID * EFIAPI InterlockedCompareExchangePointer ( - IN OUT VOID * volatile *Value, - IN VOID *CompareValue, - IN VOID *ExchangeValue + IN OUT VOID *volatile *Value, + IN VOID *CompareValue, + IN VOID *ExchangeValue ) { UINT8 SizeOfValue; @@ -392,17 +396,17 @@ InterlockedCompareExchangePointer ( switch (SizeOfValue) { case sizeof (UINT32): - return (VOID*)(UINTN)InterlockedCompareExchange32 ( - (volatile UINT32 *)Value, - (UINT32)(UINTN)CompareValue, - (UINT32)(UINTN)ExchangeValue - ); + return (VOID *)(UINTN)InterlockedCompareExchange32 ( + (volatile UINT32 *)Value, + (UINT32)(UINTN)CompareValue, + (UINT32)(UINTN)ExchangeValue + ); case sizeof (UINT64): - return (VOID*)(UINTN)InterlockedCompareExchange64 ( - (volatile UINT64 *)Value, - (UINT64)(UINTN)CompareValue, - (UINT64)(UINTN)ExchangeValue - ); + return (VOID *)(UINTN)InterlockedCompareExchange64 ( + (volatile UINT64 *)Value, + (UINT64)(UINTN)CompareValue, + (UINT64)(UINTN)ExchangeValue + ); default: ASSERT (FALSE); return NULL; |
