Re: BUG or not? GFP_KERNEL with interrupts disabled.

From: Linus Torvalds (torvalds@transmeta.com)
Date: Thu Mar 27 2003 - 14:08:26 EST


On Thu, 27 Mar 2003, Dan Eble wrote:
>
> This makes checks like the following (in alloc_skb) asymmetric:
>
> if (in_interrupt() && (gfp_mask & __GFP_WAIT)) {
> static int count = 0;
> if (++count < 5) {
> printk(KERN_ERR "alloc_skb called nonatomically "
> "from interrupt %p\n", NET_CALLER(size));
> BUG();
>
> In a driver I'm writing, this bug was hidden until I switched from using
> write_lock_irqsave() to write_lock_bh(). Shouldn't this bug also be
> announced if interrupts are disabled?

Yeah. It should also probably use "in_atomic()" instead of
"in_interrupt()", since that also finds people who have marked themselves
non-preemptible.

So what the test SHOULD look like is this:

        if (gfp_mask & __GFP_WAIT) {
                if (in_atomic() || irqs_disabled()) {
                        static int count = 0;
                        ...
                }
        }

which should catch all the cases we really care about.

                Linus

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Mar 31 2003 - 22:00:29 EST