On Mon, 28 Mar 2011, Par-Gunnar Hjalmdahl wrote: This wants to be split up for review. > +/** > + * cts_interrupt() - Called to handle CTS interrupt. > + * @irq: Interrupt that occurred. > + * @dev_id: Device ID where interrupt occurred. > + * > + * The cts_interrupt() function is called if interrupt on CTS occurred. > + * It disables the interrupt and starts a new work thread to handle > + * the interrupt. > + */ > +static irqreturn_t cts_interrupt(int irq, void *dev_id) > +{ > + struct uart_info *uart_info = dev_get_drvdata(dev_id); > +#ifdef CONFIG_PM > + disable_irq_wake(irq); > +#endif > + disable_irq_nosync(irq); > + > + /* Create work and leave IRQ context. */ > + (void)create_work_item(uart_info, handle_cts_irq); > + > + return IRQ_HANDLED; > +} Have you thought about using a threaded interrupt handler? That would make all this work cruft go away. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html