From: Kaitao Cheng <[email protected]> A later change will make list_for_each_entry() cache the next element before entering the loop body. dapm_widget_invalidate_paths() appends newly reached widgets to the temporary work list while walking it.
Keep the work-list walk open-coded so the next widget is looked up after new widgets have been appended. This preserves the existing invalidation traversal semantics and prepares the code for the list iterator update. Signed-off-by: Kaitao Cheng <[email protected]> --- sound/soc/soc-dapm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index d6192204e613..5bd921fca132 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -255,7 +255,9 @@ static __always_inline void dapm_widget_invalidate_paths( list_add_tail(&w->work_list, &list); w->endpoints[dir] = -1; - list_for_each_entry(w, &list, work_list) { + for (w = list_first_entry(&list, typeof(*w), work_list); + !list_entry_is_head(w, &list, work_list); + w = list_next_entry(w, work_list)) { snd_soc_dapm_widget_for_each_path(w, dir, p) { if (p->is_supply || !p->connect) continue; -- 2.43.0
