Nothing in the kernel code should ever be waiting for anything. It should all be event-driven.
Quote:
clear and disable interrupt
|
Top half should process all of the hardware pending requests, queue anything that needs to be handled more slowly, and leave with the interrupts enabled so more hardware requests can arrive. Bottom half should complete anything on the queue that couldn't be handled quickly in the top half. If you are leaving interrupts disabled until the bottom half runs, then the design has a problem, because the bottom half should be running outside of the interrupt context.