Not entirely relevant to the error you are seeing, but your ISR is: > irqreturn_t cpld_irq_handler(int irq, void * dev_id, struct pt_regs *regs) > { > wake_up(&cpld_intr_wait); > atomic_inc(&cpld_intr_data); /* incrementing this will indicate the poll() that the interrupt is occured */ > return 0; > }
You need to set 'cpld_intr_data' before clling wake_up() otherwise the sleeping process might run on another cpu before the data item changes. You also don't need to use the 'atomic' functions. Writing to a 'volatile' data item is sufficent. You don't want to count interrupts, just mark they have happened. Maybe your problem it that the ISR doesn't do anything to cause the hardware to drop its IRQ. David _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev