diff options
author | Julius Werner <jwerner@chromium.org> | 2015-02-05 12:55:45 -0800 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-04-13 12:21:06 +0200 |
commit | efae69a4ef9455a8f2cd5afac7b3448ba298536e (patch) | |
tree | 9b09151dd0be62e2b7c12915c3767c096c7024be | |
parent | 5d686229e8f808c65934c17da9313e758b4ef9e9 (diff) |
elog: Fix regression that caused elog to omit "System boot" event
CL:243671 moved the initialization of elog_initialized around, which is
now unfortunately so late that the ELOG_TYPE_BOOT event gets omitted
because the code believes the log to be broken at that time. Good thing
we now have a FAFT test for these things that I had of course been too
lazy to run. -.-
The real reason for moving that line was to put it after any point in
elog_init() that could still error out. The problem is that we might add
the "cleared" event before we try to shrink (which can fail and cause an
error)... but those two things cannot happen at the same time, so it
should be okay to flip them around and mark the elog as initialized in
between.
BRANCH=none
BUG=chrome-os-partner:35940
TEST=Ran firmware_EventLog on a Pinky, manually confirmed that I once
again get "System boot" events.
Change-Id: I12dcf4a8e47d302f6cd317194912c31db502bbaf
Signed-off-by: Stefan Reinauer <reinauer@chromium.org>
Original-Commit-Id: 4a1c0b861017ca25229b1042c4b37dda33e869f9
Original-Change-Id: I4103779790e1a8a53ecabffd4316724035928ce6
Original-Signed-off-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/246715
Original-Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: http://review.coreboot.org/9503
Tested-by: build bot (Jenkins)
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r-- | src/drivers/elog/elog.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c index 76e8cf71b8..f5135d99a3 100644 --- a/src/drivers/elog/elog.c +++ b/src/drivers/elog/elog.c @@ -611,15 +611,17 @@ int elog_init(void) " shrink size %d\n", total_size, CONFIG_ELOG_FULL_THRESHOLD, CONFIG_ELOG_SHRINK_SIZE); - /* Log a clear event if necessary */ - if (event_count == 0) - elog_add_event_word(ELOG_TYPE_LOG_CLEAR, total_size); + elog_initialized = ELOG_INITIALIZED; /* Shrink the log if we are getting too full */ if (next_event_offset >= CONFIG_ELOG_FULL_THRESHOLD) if (elog_shrink() < 0) return -1; + /* Log a clear event if necessary */ + if (event_count == 0) + elog_add_event_word(ELOG_TYPE_LOG_CLEAR, total_size); + #if !defined(__SMM__) /* Log boot count event except in S3 resume */ #if CONFIG_ELOG_BOOT_COUNT == 1 |