On Wed, Jul 24, 2002 at 11:34:13AM -0700, Krishna Kondaka wrote:
> slab.c : line 1072-1073 is
>
> if (in_interrupt() && (flags & SLAB_LEVEL_MASK) != SLAB_ATOMIC)
> BUG();
>
> The driver being loaded is a small proprietary driver. The init routine of
> the driver is doing kmalloc() with GFP_KERNEL as the second argument. I know
> that I can fix my driver to use GFP_ATOMIC if running in interrupt context.
>
> My question is why is the "insmod" command running in interrupt context?
Simple answer: it isn't, normally. You should try to figure out who was
calling kmalloc or the slab allocator; knowing the function will probably
already solve the miracle. All the addresses in the call trace that are
in the range from 0xc0000000 and above are potencially modules addresses,
so they're worth some closer examination.
Aside, I urgently recommend an upgrade to a newer kernel. 2.4.9 is lacking
more than half a year worth of bug fixes. That can ruin your whole day ...
Ralf