Modified the module to use spin[un]lock_irq() and spin[un]lock_irqsave[restore]().
These are required in interrupt context (esp. top halves).
In process context all work fine.