summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2013-04-25 17:21:58 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-11-25 23:06:28 +0100
commit8f4baece7acc3e0ee2e3f04a181ce51b59ec4667 (patch)
tree6f7b6f98e2ecdd01dac5cc4a21f7bc09851fbc34 /src/drivers
parent5cf34ce02a73d7a455626eaa8a6b7aa69127cca7 (diff)
downloadcoreboot-8f4baece7acc3e0ee2e3f04a181ce51b59ec4667.tar.xz
elog: Make sure the elog data structures are initialized in elog_clear.
If elog_clear is called before other elog functions, for instance if it's called through an SMI immediately after the system boots, then the elog data structures won't have been set up and the system will go off the deep end. This change adds a call to elog_init to elog_clear to make sure things things are always initialized before we start using them. Before this change, this command would cause the system to lock up if run immediately after boot: echo 1 > /sys/firmware/gsmi/clear_eventlog After this change, that results in the log being cleared correctly. Change-Id: I45027f0dbfa40ca8c581954a93b14b4fedce91ed Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: https://gerrit.chromium.org/gerrit/49303 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Stefan Reinauer <reinauer@google.com> Commit-Queue: Gabe Black <gabeblack@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org> Reviewed-on: http://review.coreboot.org/4144 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/elog/elog.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c
index 6e89b5f0f4..6de51235f5 100644
--- a/src/drivers/elog/elog.c
+++ b/src/drivers/elog/elog.c
@@ -746,6 +746,10 @@ int elog_clear(void)
elog_debug("elog_clear()\n");
+ /* Make sure ELOG structures are initialized */
+ if (elog_init() < 0)
+ return -1;
+
/* Erase flash area */
elog_flash_erase_area();