PacketIndex = 0;\r
\r
//\r
- // Journal GUID'ed HOBs to find empty record entry. \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
//\r
Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);\r
- while ((Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw)) != NULL) {\r
+ while (Hob.Raw != NULL) {\r
PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);\r
\r
//\r
//\r
PacketIndex++;\r
\r
- Hob.Raw = GET_NEXT_HOB (Hob);\r
+ Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);\r
}\r
\r
if (Record == NULL) {\r
//\r
- // No available entry found\r
+ // No available entry found, so create new packet.\r
//\r
- return EFI_OUT_OF_RESOURCES;\r
+ PacketHeader = CreateMemoryStatusCodePacket (PacketIndex);\r
+\r
+ Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);\r
+ Record = &Record[PacketHeader->RecordIndex++];\r
}\r
\r
Record->CodeType = CodeType;\r