linux/kernel/time
Thomas Gleixner 6f7a05d701 clockevents: Set dummy handler on CPU_DEAD shutdown
Vitaliy reported that a per cpu HPET timer interrupt crashes the
system during hibernation. What happens is that the per cpu HPET timer
gets shut down when the nonboot cpus are stopped. When the nonboot
cpus are onlined again the HPET code sets up the MSI interrupt which
fires before the clock event device is registered. The event handler
is still set to hrtimer_interrupt, which then crashes the machine due
to highres mode not being active.

See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=700333

There is no real good way to avoid that in the HPET code. The HPET
code alrady has a mechanism to detect spurious interrupts when event
handler == NULL for a similar reason.

We can handle that in the clockevent/tick layer and replace the
previous functional handler with a dummy handler like we do in
tick_setup_new_device().

The original clockevents code did this in clockevents_exchange_device(),
but that got removed by commit 7c1e76897 (clockevents: prevent
clockevent event_handler ending up handler_noop) which forgot to fix
it up in tick_shutdown(). Same issue with the broadcast device.

Reported-by: Vitaliy Fillipov <vitalif@yourcmc.ru>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: stable@vger.kernel.org
Cc: 700333@bugs.debian.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2013-04-25 13:57:04 +02:00
..
alarmtimer.c
clockevents.c
clocksource.c
jiffies.c
Kconfig
Makefile
ntp_internal.h ntp: Rework do_adjtimex to take timespec and tai arguments 2013-04-04 13:18:15 -07:00
ntp.c ntp: Remove ntp_lock, using the timekeeping locks to protect ntp state 2013-04-04 13:18:17 -07:00
posix-clock.c
tick-broadcast.c clockevents: Set dummy handler on CPU_DEAD shutdown 2013-04-25 13:57:04 +02:00
tick-common.c clockevents: Set dummy handler on CPU_DEAD shutdown 2013-04-25 13:57:04 +02:00
tick-internal.h Merge branch 'fortglx/3.10/time' of git://git.linaro.org/people/jstultz/linux into timers/core 2013-04-03 12:27:29 +02:00
tick-oneshot.c
tick-sched.c tick: Change log level of NOHZ: local_softirq_pending message 2013-03-25 10:46:59 +01:00
timeconv.c
timekeeping.c timekeeping: Update tk->cycle_last in resume 2013-04-22 20:17:51 +02:00
timer_list.c timer_list: Convert timer list to be a proper seq_file 2013-04-17 20:51:02 +02:00
timer_stats.c