[coreboot-gerrit] New patch to review for coreboot: AGESA: Make eventlog more tolerant to failures

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Thu Mar 2 15:30:38 CET 2017


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18543

-gerrit

commit 38cd64645b8364b20ce64c71a3ba5caff5675955
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Thu Mar 2 13:52:54 2017 +0200

    AGESA: Make eventlog more tolerant to failures
    
    We have been forced to build AGESA with ASSERT() as non-fatal
    for some board, as hitting those errors is not uncommon.
    
    For the cases touched here, abort eventlog operations early
    with null pointers and errors.
    
    Change-Id: I1a09ad55d998502ad19273cfcd8d6588d85d5e0c
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c   | 9 +++++++++
 src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c   | 9 +++++++++
 src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c   | 9 +++++++++
 src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c   | 9 +++++++++
 src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c | 9 +++++++++
 src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c | 9 +++++++++
 6 files changed, 54 insertions(+)

diff --git a/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
index 6a0033f..b703e9d 100644
--- a/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
@@ -117,6 +117,8 @@ AmdReadEventLog (
 
   ASSERT (Event != NULL);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -205,6 +207,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -267,6 +272,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -324,6 +331,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
index fcd23fb..3f8c63b 100644
--- a/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
   ASSERT (Event != NULL);
   Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
index b7c507f..f6c2c9c 100644
--- a/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
@@ -124,6 +124,8 @@ AmdReadEventLog (
   ASSERT (Event != NULL);
   Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -222,6 +224,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -284,6 +289,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -341,6 +348,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
index a9a2821..0e00fe6 100644
--- a/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
@@ -122,6 +122,8 @@ AmdReadEventLog (
   ASSERT (Event != NULL);
   Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -220,6 +222,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -282,6 +287,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -339,6 +346,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
index c6f20bd..7d0306f 100644
--- a/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
   ASSERT (Event != NULL);
   Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
index 5df76fb..ae87458 100644
--- a/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
   ASSERT (Event != NULL);
   Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
   Status = GetEventLog (&LogEvent, &Event->StdHeader);
+  if (Status != AGESA_SUCCESS)
+    return Status;
 
   Event->EventClass = LogEvent.EventClass;
   Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
   AgesaEventAlloc = NULL;
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return;
+
   Index = AgesaEventAlloc->WriteRecordPtr;
 
   // Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return AGESA_BOUNDS_CHK;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
 
   GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
   ASSERT (AgesaEventAlloc != NULL);
+  if (AgesaEventAlloc == NULL)
+	return FALSE;
 
   if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
       (AgesaEventAlloc->ReadWriteFlag == 1)) {



More information about the coreboot-gerrit mailing list