1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-10-26 16:13:55 +01:00

log: fixup log_head after relocating global data

When `gd` is relocated during `spl_relocate_stack_gd()` the
doubly-linked circular list in the `log_head` member is broken.

The last element of the list should point back to the initial
`list_head`, but as the initial `list_head` is moved the pointer becomes
stale. As a result the loop in `log_dispatch` would never finish.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
This commit is contained in:
Thomas Weißschuh
2024-02-13 18:13:28 +01:00
committed by Tom Rini
parent 657bd30c6b
commit 39162d9348
3 changed files with 20 additions and 0 deletions

View File

@@ -688,4 +688,16 @@ static inline int log_get_default_format(void)
(IS_ENABLED(CONFIG_LOGF_FUNC) ? BIT(LOGF_FUNC) : 0);
}
struct global_data;
/**
* log_fixup_for_gd_move() - Handle global_data moving to a new place
*
* @new_gd: Pointer to the new global data
*
* The log_head list is part of global_data. Due to the way lists work, moving
* the list will cause it to become invalid. This function fixes that up so
* that the log_head list will work correctly.
*/
void log_fixup_for_gd_move(struct global_data *new_gd);
#endif