elog: Check for successful flash erase in elog_shrink
A parrot device with a bad flash part has been seen to hang in the elog_shrink code becuase the flash was not successfully erased and it gets stuck in a loop trying to shrink the log and then add an event. BUG=chrome-os-partner:18852 BRANCH=parrot TEST=manual: power cycle testing on device with bad flash Change-Id: I8bb13dbadd293f9d892f322e213c9255c8e9acb3 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/56405 Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
ce8fd58e93
commit
e7e2c638e4
1 changed files with 8 additions and 1 deletions
|
|
@ -661,6 +661,12 @@ static int elog_shrink(void)
|
|||
/* Erase flash area */
|
||||
elog_flash_erase_area();
|
||||
|
||||
/* Ensure the area was successfully erased */
|
||||
if (elog_get_flash()->next_event_offset >= CONFIG_ELOG_FULL_THRESHOLD) {
|
||||
printk(BIOS_ERR, "ELOG: Flash area was not erased!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Write new flash area */
|
||||
elog_prepare_empty(elog_get_flash(),
|
||||
(u8*)elog_get_event_base(mem, offset),
|
||||
|
|
@ -839,7 +845,8 @@ int elog_init(void)
|
|||
|
||||
/* Shrink the log if we are getting too full */
|
||||
if (elog_get_mem()->next_event_offset >= CONFIG_ELOG_FULL_THRESHOLD)
|
||||
elog_shrink();
|
||||
if (elog_shrink() < 0)
|
||||
return -1;
|
||||
|
||||
#if CONFIG_ELOG_BOOT_COUNT && !defined(__SMM__)
|
||||
/* Log boot count event except in S3 resume */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue