At this point, you understand that the bottom half, the tasklet, is a deferred functionality mechanism that, while running, doesn't mask interrupts. They're designed to allow you to get the best of both worlds: they allow the driver to do fairly lengthy interrupt processing if the situation demands it and do it in a deferred safe manner while simultaneously allowing the business of the system (via hardware interrupts) to continue.
You've already learned how to use the tasklet – it's a great example of a deferred functionality mechanism. But how are they internally implemented? The kernel implements tasklets via an underlying facility called the softirq (or software-interrupt) mechanism. Though on the surface they're analogous to the threaded interrupt we saw earlier, it's really very different in many important ways. The following characteristics of softirqs will help you...