Linus Torvalds
2d860ad76f
genirq: prevent wakeup of freed irq thread
...
free_irq() can remove an irqaction while the corresponding interrupt
is in progress, but free_irq() sets action->thread to NULL
unconditionally, which might lead to a NULL pointer dereference in
handle_IRQ_event() when the hard interrupt context tries to wake up
the handler thread.
Prevent this by moving the thread stop after synchronize_irq(). No
need to set action->thread to NULL either as action is going to be
freed anyway.
This fixes a boot crash reported against preempt-rt which uses the
mainline irq threads code to implement full irq threading.
[ tglx: removed local irqthread variable ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2009-08-13 23:09:27 +02:00
..
2009-06-18 13:03:58 -07:00
2009-08-13 23:09:27 +02:00
2009-07-12 12:22:34 -07:00
2009-07-19 17:15:54 +02:00
2009-08-12 18:50:08 +02:00
2009-06-30 18:56:00 -07:00
2009-06-08 12:31:53 -07:00
2009-06-24 00:02:38 -04:00
2009-06-24 00:00:52 -04:00
2009-06-24 00:02:38 -04:00
2009-06-24 00:02:38 -04:00
2009-06-24 00:00:52 -04:00
2009-06-24 00:02:38 -04:00
2009-04-02 19:04:54 -07:00
2009-07-29 19:10:35 -07:00
2009-04-30 19:24:24 +02:00
2009-06-22 21:18:12 -07:00
2009-06-16 19:47:31 -07:00
2009-05-11 08:15:36 +10:00
2009-03-31 23:00:27 -04:00
2009-07-08 09:31:56 -07:00
2009-04-05 11:04:19 -07:00
2009-08-07 10:39:56 -07:00
2009-07-18 14:19:53 +02:00
2009-08-10 15:41:12 +02:00
2009-08-10 20:38:11 +02:00
2009-06-16 19:47:48 -07:00
2009-07-10 17:32:55 +02:00
2009-06-09 22:37:52 +02:00
2009-07-29 19:10:34 -07:00
2009-06-16 19:47:47 -07:00
2009-05-15 07:56:24 -05:00
2009-07-08 09:31:56 -07:00
2009-07-30 16:44:06 -07:00
2009-07-27 12:15:46 -07:00
2009-05-12 19:59:52 +02:00
2009-08-07 11:58:38 +02:00
2009-05-07 11:17:34 +02:00
2009-06-28 11:05:04 -07:00
2009-07-27 12:15:45 -07:00
2009-06-11 17:55:42 +02:00
2009-04-02 19:04:53 -07:00
2009-06-18 13:03:56 -07:00
2009-07-24 15:30:45 -04:00
2009-06-12 21:46:58 +09:30
2009-08-13 16:17:15 +02:00
2009-06-18 13:03:55 -07:00
2009-07-09 17:07:02 +01:00
2009-08-08 18:30:25 +02:00
2009-08-04 10:16:41 +02:00
2009-06-16 11:02:28 -07:00
2009-07-29 19:10:36 -07:00
2009-07-06 13:57:04 -07:00
2009-04-03 12:23:02 +02:00
2009-04-15 13:55:14 -07:00
2009-05-05 20:28:05 +02:00
2009-03-30 22:05:16 +10:30
2009-04-14 11:33:43 +02:00
2009-06-24 15:02:48 +02:00
2009-04-03 12:23:03 +02:00
2009-04-05 11:04:19 -07:00
2009-06-18 13:03:48 -07:00
2009-06-30 18:56:00 -07:00
2009-04-06 11:14:02 +02:00
2009-08-06 05:50:21 +02:00
2009-05-09 10:08:19 +02:00
2009-08-02 14:23:29 +02:00
2009-03-30 22:05:17 +10:30
2009-06-17 18:29:42 +02:00
2009-08-02 14:10:12 +02:00
2009-03-30 17:17:35 -07:00
2009-05-15 15:32:45 +02:00
2009-07-10 10:43:29 +02:00
2009-07-18 14:19:52 +02:00
2009-08-01 11:18:56 -07:00
2009-06-16 19:47:49 -07:00
2009-08-07 10:39:55 -07:00
2009-07-22 17:01:17 +02:00
2009-04-02 19:05:11 -07:00
2009-03-30 22:05:17 +10:30
2009-06-16 19:47:48 -07:00
2009-06-28 11:05:28 -07:00
2009-07-18 23:11:43 +02:00
2009-06-15 21:30:23 -07:00
2009-04-02 19:05:01 -07:00
2009-06-18 13:03:55 -07:00
2009-08-10 14:43:09 +02:00
2009-06-02 01:10:40 +02:00