android_kernel_xiaomi_sm8350/kernel/time
Thomas Gleixner 5e41d0d60a clockevents: prevent stale tick update on offline cpu
Taking a cpu offline removes the cpu from the online mask before the
CPU_DEAD notification is done. The clock events layer does the cleanup
of the dead CPU from the CPU_DEAD notifier chain. tick_do_timer_cpu is
used to avoid xtime lock contention by assigning the task of jiffies
xtime updates to one CPU. If a CPU is taken offline, then this
assignment becomes stale. This went unnoticed because most of the time
the offline CPU went dead before the online CPU reached __cpu_die(),
where the CPU_DEAD state is checked. In the case that the offline CPU did
not reach the DEAD state before we reach __cpu_die(), the code in there
goes to sleep for 100ms. Due to the stale time update assignment, the
system is stuck forever.

Take the assignment away when a cpu is not longer in the cpu_online_mask.
We do this in the last call to tick_nohz_stop_sched_tick() when the offline
CPU is on the way to the final play_dead() idle entry.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2007-09-16 15:36:43 +02:00
..
clockevents.c timer: remove clockevents_unregister_notifier 2007-08-11 15:47:42 -07:00
clocksource.c clocksource: fix lock order in the resume path 2007-05-15 08:54:00 -07:00
jiffies.c
Kconfig
Makefile Move timekeeping code to timekeeping.c 2007-05-08 11:15:06 -07:00
ntp.c Fix "no_sync_cmos_clock" logic inversion in kernel/time/ntp.c 2007-09-11 17:21:27 -07:00
tick-broadcast.c clockevents: do not shutdown the oneshot broadcast device 2007-09-16 15:36:43 +02:00
tick-common.c clockevents: fix resume logic 2007-07-21 17:49:15 -07:00
tick-internal.h highres/dyntick: prevent xtime lock contention 2007-05-08 11:15:10 -07:00
tick-oneshot.c highres: improve debug output 2007-07-21 17:49:15 -07:00
tick-sched.c clockevents: prevent stale tick update on offline cpu 2007-09-16 15:36:43 +02:00
timekeeping.c timekeeping: Prevent time going backwards on resume 2007-09-16 15:36:43 +02:00
timer_list.c Fix leaks on /proc/{*/sched,sched_debug,timer_list,timer_stats} 2007-07-31 15:39:40 -07:00
timer_stats.c Fix leaks on /proc/{*/sched,sched_debug,timer_list,timer_stats} 2007-07-31 15:39:40 -07:00