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>
This commit is contained in:
Gabe Black 2013-04-25 17:21:58 -07:00 committed by Stefan Reinauer
parent 5cf34ce02a
commit 8f4baece7a
1 changed files with 4 additions and 0 deletions

View File

@ -746,6 +746,10 @@ int elog_clear(void)
elog_debug("elog_clear()\n"); elog_debug("elog_clear()\n");
/* Make sure ELOG structures are initialized */
if (elog_init() < 0)
return -1;
/* Erase flash area */ /* Erase flash area */
elog_flash_erase_area(); elog_flash_erase_area();