Messages in this thread | | | Date | Tue, 2 Jul 2013 14:28:51 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [PATCH v2] metag: kick: add missing irq_enter/exit to kick_handler() |
| |
On Tue, 2 Jul 2013, James Hogan wrote:
> kick_handler() doesn't have an irq_enter/exit pair, but it's used for > handling SMP IPIs which require work to be done in softirqs, which are > invoked from irq_exit() when the hard irq nest count reaches 0. > > The scheduler_ipi() callback in the IPI handler calls irq_enter/exit > itself, but this is inside kick_handler()'s spin lock critical section, > so if an invoked softirq issues an IPI the kick_handler() will be > re-entered on the same CPU and will deadlock. > > This is easily fixed by adding the missing irq_enter/exit to > kick_handler() so that the hard irq nest count doesn't reach 0 until > after the spin lock has been released. > > Ideally the spin lock protected handler list will also be replaced by a > lockless RCU protected list since it is certainly mostly read. That can > be done in a later change though. > > Signed-off-by: James Hogan <james.hogan@imgtec.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
| |