On Fri, 11 Mar 2016, Sean Nyekjaer wrote: > static irqreturn_t sc16is7xx_irq(int irq, void *dev_id) > { > struct sc16is7xx_port *s = (struct sc16is7xx_port *)dev_id; > + int i; > + > + for (i = 0; i < s->devtype->nr_uart; ++i) > + disable_irq_nosync(s->p[i].port.irq); Aside of the lack of a changelog. This is completely bogus. You disable the same interrupt a gazillion of times. > queue_kthread_work(&s->kworker, &s->irq_work); This driver should use a threaded interrupt instead of trying to emulate it via dis/enable_irq and a worker thread. Then you simply call c16is7xx_port_irq() right from the interrupt routine and the core code deals with the interrupt mask/unmask automatically. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html