]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
timekeeping: Use READ/WRITE_ONCE() for tick_do_timer_cpu
authorThomas Gleixner <tglx@linutronix.de>
Tue, 9 Apr 2024 10:29:12 +0000 (12:29 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 10 Apr 2024 08:13:42 +0000 (10:13 +0200)
commitf87cbcb345d059f0377b4fa0ba1b766a17fc3710
tree5593baf8c37a2d77828e4f26c237eb2127009a7e
parent6d029c25b71f2de2838a6f093ce0fa0e69336154
timekeeping: Use READ/WRITE_ONCE() for tick_do_timer_cpu

tick_do_timer_cpu is used lockless to check which CPU needs to take care
of the per tick timekeeping duty. This is done to avoid a thundering
herd problem on jiffies_lock.

The read and writes are not annotated so KCSAN complains about data races:

  BUG: KCSAN: data-race in tick_nohz_idle_stop_tick / tick_nohz_next_event

  write to 0xffffffff8a2bda30 of 4 bytes by task 0 on cpu 26:
   tick_nohz_idle_stop_tick+0x3b1/0x4a0
   do_idle+0x1e3/0x250

  read to 0xffffffff8a2bda30 of 4 bytes by task 0 on cpu 16:
   tick_nohz_next_event+0xe7/0x1e0
   tick_nohz_get_sleep_length+0xa7/0xe0
   menu_select+0x82/0xb90
   cpuidle_select+0x44/0x60
   do_idle+0x1c2/0x250

  value changed: 0x0000001a -> 0xffffffff

Annotate them with READ/WRITE_ONCE() to document the intentional data race.

Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Sean Anderson <sean.anderson@seco.com>
Link: https://lore.kernel.org/r/87cyqy7rt3.ffs@tglx
kernel/time/tick-common.c
kernel/time/tick-sched.c