Yes, an interrupt context is either running in a bh or in an interrupt.
Neither must ever sleep.
> net_foo()
> {
> /* We run from user context, but need to protect
> * against incoming packet handling code...
> */
> start_bh_atomic();
> ...
> /* This now doesn't work with the current code... */
> skb = alloc_skb(size, GFP_KERNEL);
> ...
> end_bh_atomic();
> }
>
> won't work anymore...
Sure, the above works fine. It's not actually running in a bottom half
handler, it's just protected against bottom half handlers.
2.1.83 may have been broken in this regard, although I doubt it. 2.1.84
certainly is not.
Note that sleeping with bh's disabled can be considered a bug in itself:
what if the wakeup mechanism requires bh's to work? The current kernel
won't complain, but you may have a dead machine on your hands.
Linus