SKU_ID gSkuId = 0xFFFFFFFFFFFFFFFF;\r
LIST_ENTRY gVarStorageList = INITIALIZE_LIST_HEAD_VARIABLE (gVarStorageList);\r
\r
+//\r
+// HII database lock.\r
+//\r
+EFI_LOCK mHiiDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE(TPL_NOTIFY);\r
+\r
/**\r
This function generates a HII_DATABASE_RECORD node and adds into hii database.\r
This is a internal function.\r
}\r
}\r
\r
+ EfiAcquireLock (&mHiiDatabaseLock);\r
+\r
//\r
// Build a PackageList node\r
//\r
Status = GenerateHiiDatabaseRecord (Private, &DatabaseRecord);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
\r
//\r
Status = AddPackages (Private, EFI_HII_DATABASE_NOTIFY_NEW_PACK, PackageList, DatabaseRecord);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
\r
if (gExportAfterReadyToBoot) {\r
HiiGetDatabaseInfo (This);\r
}\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
\r
//\r
+ // Notes:\r
+ // HiiGetDatabaseInfo () will get the contents of HII data base,\r
+ // belong to the atomic behavior of Hii Database update.\r
+ // And since HiiGetConfigRespInfo () will get the configuration setting info from HII drivers\r
+ // we can not think it belong to the atomic behavior of Hii Database update.\r
+ // That's why EfiReleaseLock (&mHiiDatabaseLock) is callled before HiiGetConfigRespInfo ().\r
+ //\r
+\r
// Check whether need to get the configuration setting info from HII drivers.\r
// When after ReadyToBoot and need to do the export for form package add.\r
//\r
return EFI_NOT_FOUND;\r
}\r
\r
+ EfiAcquireLock (&mHiiDatabaseLock);\r
+\r
Private = HII_DATABASE_DATABASE_PRIVATE_DATA_FROM_THIS (This);\r
\r
//\r
//\r
Status = RemoveGuidPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveFormPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveKeyboardLayoutPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveStringPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveFontPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveImagePackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveSimpleFontPackages (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
Status = RemoveDevicePathPackage (Private, Handle, PackageList);\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
\r
if (gExportAfterReadyToBoot) {\r
HiiGetDatabaseInfo (This);\r
}\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
+\r
+ //\r
+ // Notes:\r
+ // HiiGetDatabaseInfo () will get the contents of HII data base,\r
+ // belong to the atomic behavior of Hii Database update.\r
+ // And since HiiGetConfigRespInfo () will get the configuration setting info from HII drivers\r
+ // we can not think it belong to the atomic behavior of Hii Database update.\r
+ // That's why EfiReleaseLock (&mHiiDatabaseLock) is callled before HiiGetConfigRespInfo ().\r
+ //\r
\r
//\r
// Check whether need to get the configuration setting info from HII drivers.\r
}\r
}\r
\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return EFI_NOT_FOUND;\r
}\r
\r
\r
Status = EFI_SUCCESS;\r
\r
+ EfiAcquireLock (&mHiiDatabaseLock);\r
//\r
// Get original packagelist to be updated\r
//\r
}\r
\r
if (EFI_ERROR (Status)) {\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return Status;\r
}\r
\r
if (gExportAfterReadyToBoot && Status == EFI_SUCCESS) {\r
HiiGetDatabaseInfo (This);\r
}\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
+\r
+ //\r
+ // Notes:\r
+ // HiiGetDatabaseInfo () will get the contents of HII data base,\r
+ // belong to the atomic behavior of Hii Database update.\r
+ // And since HiiGetConfigRespInfo () will get the configuration setting info from HII drivers\r
+ // we can not think it belong to the atomic behavior of Hii Database update.\r
+ // That's why EfiReleaseLock (&mHiiDatabaseLock) is callled before HiiGetConfigRespInfo ().\r
+ //\r
\r
//\r
// Check whether need to get the configuration setting info from HII drivers.\r
return Status;\r
}\r
}\r
-\r
+ EfiReleaseLock (&mHiiDatabaseLock);\r
return EFI_NOT_FOUND;\r
}\r
\r