Files
erofs-linux/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 <[email protected]>
Reported-by: Ben Greear <[email protected]>
Cc: John Stultz <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2011-07-26 16:49:42 -07:00
..
…
2011-07-26 16:49:42 -07:00
2011-03-31 11:26:23 -03:00
2011-06-01 19:29:39 -07:00
2011-03-22 17:44:16 -07:00
…
2011-05-26 17:12:33 -07:00
…
2011-03-31 11:26:23 -03:00
…
2011-05-26 17:12:33 -07:00
2011-07-25 21:00:19 -07:00
2011-05-26 17:12:33 -07:00
2011-03-31 11:26:23 -03:00