irq/work: Use llist_for_each_entry_safe
authorThomas Gleixner <[email protected]>
Sun, 12 Nov 2017 12:02:51 +0000 (13:02 +0100)
committerThomas Gleixner <[email protected]>
Sun, 12 Nov 2017 12:15:14 +0000 (13:15 +0100)
commitd00a08cf9ee986ad6689ce8c6fd176aff679c106
treead39bb22f22d5613e7c40b5e39552c334192dd46
parent9dc505d6df5c607a4ea088b5f1907540079a9859
irq/work: Use llist_for_each_entry_safe

The llist_for_each_entry() loop in irq_work_run_list() is unsafe because
once the works PENDING bit is cleared it can be requeued on another CPU.

Use llist_for_each_entry_safe() instead.

Fixes: 16c0890dc66d ("irq/work: Don't reinvent the wheel but use existing llist API")
Reported-by:Chris Wilson <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Byungchul Park <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Petri Latvala <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
kernel/irq_work.c