You acquire spinlocks in interrupt context.
Now there are variety of way for implementing bottom halfs, for 2.6 old BH and Task queues has been removed and is replaced by Softirq, Tasklet and Work queues.
Softirqs are really for important and time critical work like servicing RX & TX network traffic, timer interrupt and Tasklet. For your driver most obvious choice is Tasklets. Softirqs and Tasklet are present in 2.4 also. Work queues are new in 2.6.Work queue also provide process context.
Suggest "Linux Kernel Development" by Robert Love.
Usman
-- Usman S. Ansari http://beconvinced.com
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/