what is the difference between top halves and bottom half interrupts?
The so-called top half is the routine that actually responds to the interrupt—the one you register with request_irq. ... The big difference between the top-half handler and the bottom half is that all interrupts are enabled during execution of the bottom half—that's why it runs at a safer time.