Revision: 16363
          http://sourceforge.net/p/edk2/code/16363
Author:   jljusten
Date:     2014-11-13 18:28:33 +0000 (Thu, 13 Nov 2014)
Log Message:
-----------
UefiCpuPkg/MpService: Simply Lock usage

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <[email protected]>
Reviewed-by: Jeff Fan <[email protected]>

Modified Paths:
--------------
    trunk/edk2/UefiCpuPkg/CpuDxe/CpuMp.c

Modified: trunk/edk2/UefiCpuPkg/CpuDxe/CpuMp.c
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuDxe/CpuMp.c        2014-11-13 18:28:20 UTC (rev 
16362)
+++ trunk/edk2/UefiCpuPkg/CpuDxe/CpuMp.c        2014-11-13 18:28:33 UTC (rev 
16363)
@@ -38,6 +38,36 @@
 };
 
 /**
+   Get Mp Service Lock.
+
+  @param   CpuData    the pointer to CPU_DATA_BLOCK of specified processor
+
+**/
+VOID
+GetMpSpinLock (
+  IN  CPU_DATA_BLOCK  *CpuData
+  )
+{
+  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
+    CpuPause ();
+  }
+}
+
+/**
+   Release Mp Service Lock.
+
+  @param   CpuData    the pointer to CPU_DATA_BLOCK of specified processor
+
+**/
+VOID
+ReleaseMpSpinLock (
+  IN  CPU_DATA_BLOCK  *CpuData
+  )
+{
+  ReleaseSpinLock (&CpuData->CpuDataLock);
+}
+
+/**
   Check whether caller processor is BSP.
 
   @retval  TRUE       the caller is BSP
@@ -75,12 +105,9 @@
 {
   CPU_STATE State;
 
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   State = CpuData->State;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 
   return State;
 }
@@ -98,12 +125,9 @@
   IN  CPU_STATE        State
   )
 {
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   CpuData->State = State;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 }
 
 /**
@@ -122,13 +146,10 @@
   IN   VOID                  *ProcedureArgument
   )
 {
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   CpuData->Parameter  = ProcedureArgument;
   CpuData->Procedure  = Procedure;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 }
 
 /**
@@ -149,12 +170,9 @@
 {
   UINT32 Ret;
 
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   Ret = CpuData->Info.StatusFlag & Flags;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 
   return !!(Ret);
 }
@@ -172,12 +190,9 @@
   IN  UINT32          Flags
   )
 {
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   CpuData->Info.StatusFlag |= Flags;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 }
 
 /**
@@ -193,12 +208,9 @@
   IN  UINT32          Flags
   )
 {
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-    CpuPause ();
-  }
-
+  GetMpSpinLock (CpuData);
   CpuData->Info.StatusFlag &= ~Flags;
-  ReleaseSpinLock (&CpuData->CpuDataLock);
+  ReleaseMpSpinLock (CpuData);
 }
 
 /**
@@ -1127,25 +1139,18 @@
   AsmApDoneWithCommonStack ();
 
   while (TRUE) {
-    while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-      CpuPause ();
-    }
-
+    GetMpSpinLock (CpuData);
     ProcedureArgument = CpuData->Parameter;
     Procedure = CpuData->Procedure;
-    ReleaseSpinLock (&CpuData->CpuDataLock);
+    ReleaseMpSpinLock (CpuData);
 
     if (Procedure != NULL) {
       Procedure (ProcedureArgument);
 
-      while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {
-        CpuPause ();
-      }
-
+      GetMpSpinLock (CpuData);
       CpuData->Procedure = NULL;
-      ReleaseSpinLock (&CpuData->CpuDataLock);
-
-      SetApState (CpuData, CpuStateFinished);
+      CpuData->State = CpuStateFinished;
+      ReleaseMpSpinLock (CpuData);
     }
 
     CpuPause ();


------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to