PacketIndex = 0;\r
\r
//\r
- // Journal GUID'ed HOBs to find empty record entry. if found, then save status code in it.\r
- // otherwise, create a new GUID'ed HOB.\r
+ // Journal GUID'ed HOBs to find empty record entry. \r
//\r
Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);\r
- while (Hob.Raw != NULL) {\r
+ while ((Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw)) != NULL) {\r
PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);\r
\r
//\r
//\r
PacketIndex++;\r
\r
- Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);\r
+ Hob.Raw = GET_NEXT_HOB (Hob);\r
}\r
\r
if (Record == NULL) {\r
//\r
- // No available entry found, so create new packet.\r
+ // No available entry found\r
//\r
- PacketHeader = CreateMemoryStatusCodePacket (PacketIndex);\r
-\r
- Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);\r
- Record = &Record[PacketHeader->RecordIndex++];\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
Record->CodeType = CodeType;\r
//\r
// Cache data hub protocol.\r
//\r
-EFI_DATA_HUB_PROTOCOL *mDataHubProtocol;\r
+EFI_DATA_HUB_PROTOCOL *mDataHubProtocol = NULL;\r
\r
\r
/**\r
BASE_LIST Marker;\r
CHAR8 *Format;\r
UINTN CharCount;\r
+ EFI_STATUS Status;\r
\r
//\r
// Use atom operation to avoid the reentant of report.\r
return EFI_DEVICE_ERROR;\r
}\r
\r
+ if (mDataHubProtocol == NULL) {\r
+ Status = DataHubStatusCodeInitializeWorker ();\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ }\r
+ \r
Record = AcquireRecordBuffer ();\r
if (Record == NULL) {\r
//\r
NULL, \r
(VOID **) &mDataHubProtocol\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status)) {\r
+ mDataHubProtocol = NULL;\r
+ return Status;\r
+ }\r
\r
//\r
// Create a Notify Event to log data in Data Hub\r
ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {\r
- Status = DataHubStatusCodeInitializeWorker ();\r
- ASSERT_EFI_ERROR (Status);\r
+ DataHubStatusCodeInitializeWorker ();\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
//\r