]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/MpService: Simply Lock usage
authorChen Fan <chen.fan.fnst@cn.fujitsu.com>
Thu, 13 Nov 2014 18:28:33 +0000 (18:28 +0000)
committerjljusten <jljusten@Edk2>
Thu, 13 Nov 2014 18:28:33 +0000 (18:28 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Jeff Fan <jeff.fan@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16363 6f19259b-4bc3-4df7-8a09-765794883524

UefiCpuPkg/CpuDxe/CpuMp.c

index 7ceda3550dd86ce9b090cc61f788009b41c0d8d6..a37e45aebdeb0959be07cd69f8c50ad1c61ae071 100644 (file)
@@ -37,6 +37,36 @@ EFI_MP_SERVICES_PROTOCOL  mMpServicesTemplate = {
   WhoAmI\r
 };\r
 \r
+/**\r
+   Get Mp Service Lock.\r
+\r
+  @param   CpuData    the pointer to CPU_DATA_BLOCK of specified processor\r
+\r
+**/\r
+VOID\r
+GetMpSpinLock (\r
+  IN  CPU_DATA_BLOCK  *CpuData\r
+  )\r
+{\r
+  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
+    CpuPause ();\r
+  }\r
+}\r
+\r
+/**\r
+   Release Mp Service Lock.\r
+\r
+  @param   CpuData    the pointer to CPU_DATA_BLOCK of specified processor\r
+\r
+**/\r
+VOID\r
+ReleaseMpSpinLock (\r
+  IN  CPU_DATA_BLOCK  *CpuData\r
+  )\r
+{\r
+  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+}\r
+\r
 /**\r
   Check whether caller processor is BSP.\r
 \r
@@ -75,12 +105,9 @@ GetApState (
 {\r
   CPU_STATE State;\r
 \r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   State = CpuData->State;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 \r
   return State;\r
 }\r
@@ -98,12 +125,9 @@ SetApState (
   IN  CPU_STATE        State\r
   )\r
 {\r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   CpuData->State = State;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 }\r
 \r
 /**\r
@@ -122,13 +146,10 @@ SetApProcedure (
   IN   VOID                  *ProcedureArgument\r
   )\r
 {\r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   CpuData->Parameter  = ProcedureArgument;\r
   CpuData->Procedure  = Procedure;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 }\r
 \r
 /**\r
@@ -149,12 +170,9 @@ TestCpuStatusFlag (
 {\r
   UINT32 Ret;\r
 \r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   Ret = CpuData->Info.StatusFlag & Flags;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 \r
   return !!(Ret);\r
 }\r
@@ -172,12 +190,9 @@ CpuStatusFlagOr (
   IN  UINT32          Flags\r
   )\r
 {\r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   CpuData->Info.StatusFlag |= Flags;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 }\r
 \r
 /**\r
@@ -193,12 +208,9 @@ CpuStatusFlagAndNot (
   IN  UINT32          Flags\r
   )\r
 {\r
-  while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-    CpuPause ();\r
-  }\r
-\r
+  GetMpSpinLock (CpuData);\r
   CpuData->Info.StatusFlag &= ~Flags;\r
-  ReleaseSpinLock (&CpuData->CpuDataLock);\r
+  ReleaseMpSpinLock (CpuData);\r
 }\r
 \r
 /**\r
@@ -1127,25 +1139,18 @@ ProcessorToIdleState (
   AsmApDoneWithCommonStack ();\r
 \r
   while (TRUE) {\r
-    while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-      CpuPause ();\r
-    }\r
-\r
+    GetMpSpinLock (CpuData);\r
     ProcedureArgument = CpuData->Parameter;\r
     Procedure = CpuData->Procedure;\r
-    ReleaseSpinLock (&CpuData->CpuDataLock);\r
+    ReleaseMpSpinLock (CpuData);\r
 \r
     if (Procedure != NULL) {\r
       Procedure (ProcedureArgument);\r
 \r
-      while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
-        CpuPause ();\r
-      }\r
-\r
+      GetMpSpinLock (CpuData);\r
       CpuData->Procedure = NULL;\r
-      ReleaseSpinLock (&CpuData->CpuDataLock);\r
-\r
-      SetApState (CpuData, CpuStateFinished);\r
+      CpuData->State = CpuStateFinished;\r
+      ReleaseMpSpinLock (CpuData);\r
     }\r
 \r
     CpuPause ();\r