提交 bae07f8a 编写于 作者: M Max Filippov 提交者: Chris Zankel

xtensa: clear timer IRQ unconditionally in its handler

PIC irq_ack doesn't clear timer IRQ, because timer interrupt handler
usually set up new timer by writing to ccompare register and thus
clearing timer IRQ. However timer may not be set up in the IRQ handler,
e.g. with tickless idle on SMP, or when CPU is going offline, leaving
timer IRQ raised and making do_interrupt attempting to handle it
forever.

To fix this always write current value of ccompare SR chosen to be linux
timer back to that SR on entry to timer interrupt handler.
Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
Signed-off-by: NChris Zankel <chris@zankel.net>
上级 99623239
...@@ -158,6 +158,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id) ...@@ -158,6 +158,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
{ {
struct clock_event_device *evt = &this_cpu_ptr(&ccount_timer)->evt; struct clock_event_device *evt = &this_cpu_ptr(&ccount_timer)->evt;
set_linux_timer(get_linux_timer());
evt->event_handler(evt); evt->event_handler(evt);
/* Allow platform to do something useful (Wdog). */ /* Allow platform to do something useful (Wdog). */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册