linux-stable-rt/drivers/rtc
Thomas Gleixner b830ac1d9a rtc: fix hrtimer deadlock
Ben reported a lockup related to rtc. The lockup happens due to:

CPU0                                        CPU1

rtc_irq_set_state()			    __run_hrtimer()
  spin_lock_irqsave(&rtc->irq_task_lock)    rtc_handle_legacy_irq();
					      spin_lock(&rtc->irq_task_lock);
  hrtimer_cancel()
    while (callback_running);

So the running callback never finishes as it's blocked on
rtc->irq_task_lock.

Use hrtimer_try_to_cancel() instead and drop rtc->irq_task_lock while
waiting for the callback.  Fix this for both rtc_irq_set_state() and
rtc_irq_set_freq().

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Ben Greear <greearb@candelatech.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-07-26 16:49:42 -07:00
..
Kconfig drivers/rtc: add support for Qualcomm PMIC8xxx RTC 2011-07-25 20:57:17 -07:00
Makefile drivers/rtc: add support for Qualcomm PMIC8xxx RTC 2011-07-25 20:57:17 -07:00
class.c rtc: Avoid accumulating time drift in suspend/resume 2011-06-21 16:55:39 -07:00
hctosys.c
interface.c rtc: fix hrtimer deadlock 2011-07-26 16:49:42 -07:00
rtc-88pm860x.c
rtc-ab3100.c
rtc-ab8500.c
rtc-at32ap700x.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-at91rm9200.c
rtc-at91sam9.c
rtc-au1xxx.c
rtc-bfin.c
rtc-bq32k.c
rtc-bq4802.c
rtc-cmos.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-coh901331.c
rtc-core.h
rtc-davinci.c
rtc-dev.c
rtc-dm355evm.c
rtc-ds1216.c
rtc-ds1286.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-ds1302.c
rtc-ds1305.c
rtc-ds1307.c drivers/rtc/rtc-ds1307.c: add support for RTC device pt7c4338 2011-06-27 18:00:12 -07:00
rtc-ds1374.c
rtc-ds1390.c
rtc-ds1511.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-ds1553.c
rtc-ds1672.c
rtc-ds1742.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-ds3232.c
rtc-ds3234.c
rtc-efi.c
rtc-em3027.c
rtc-ep93xx.c
rtc-fm3130.c
rtc-generic.c
rtc-imxdi.c
rtc-isl1208.c
rtc-isl12022.c
rtc-jz4740.c
rtc-lib.c
rtc-lpc32xx.c
rtc-m41t80.c
rtc-m41t93.c
rtc-m41t94.c
rtc-m48t35.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-m48t59.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-m48t86.c
rtc-max6900.c
rtc-max6902.c
rtc-max8925.c
rtc-max8998.c
rtc-mc13xxx.c
rtc-mpc5121.c drivers/rtc/rtc-mpc5121.c: add support for RTC on MPC5200 2011-07-25 20:57:17 -07:00
rtc-mrst.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-msm6242.c
rtc-mv.c
rtc-mxc.c
rtc-nuc900.c
rtc-omap.c
rtc-pcap.c
rtc-pcf2123.c
rtc-pcf8563.c
rtc-pcf8583.c
rtc-pcf50633.c
rtc-pl030.c
rtc-pl031.c
rtc-pm8xxx.c drivers/rtc: add support for Qualcomm PMIC8xxx RTC 2011-07-25 20:57:17 -07:00
rtc-proc.c
rtc-ps3.c
rtc-puv3.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rtc-pxa.c
rtc-r9701.c
rtc-rp5c01.c
rtc-rs5c313.c
rtc-rs5c348.c
rtc-rs5c372.c
rtc-rv3029c2.c
rtc-rx8025.c
rtc-rx8581.c
rtc-s3c.c Merge 'akpm' patch series 2011-07-25 21:00:19 -07:00
rtc-s35390a.c
rtc-sa1100.c
rtc-sh.c
rtc-spear.c
rtc-starfire.c
rtc-stk17ta8.c
rtc-stmp3xxx.c rtc: stmp3xxx: Remove UIE handlers 2011-07-01 18:09:57 -07:00
rtc-sun4v.c
rtc-sysfs.c
rtc-tegra.c drivers/rtc/rtc-tegra.c: properly initialize spinlock 2011-07-25 20:57:17 -07:00
rtc-test.c
rtc-tile.c
rtc-twl.c drivers/rtc/rtc-twl.c: check return value of twl_rtc_write_u8() in twl_rtc_set_time() 2011-07-25 20:57:17 -07:00
rtc-tx4939.c
rtc-v3020.c
rtc-vr41xx.c
rtc-vt8500.c rtc: vt8500: Use define instead of hardcoded value for status bit 2011-07-01 17:59:36 -07:00
rtc-wm831x.c
rtc-wm8350.c
rtc-x1205.c