Markus Franke wrote:
Dear uClinux Developers/Users,
I developed a linux character device driver in order to access an
external memory chip sitting on the flexbus. The data transfers are done
via the Multichannel DMA Controller.
From time to time (it's not really deterministic) my board hangs up.
Via BDM interface I can still access the target and it show's me the
following backtrace:
---snip---
#0 0x03035856 in cache_alloc_refill (cachep=0x31cf2c0, flags=208) at
list.h:172
#1 0x03035d38 in __kmalloc (size=52228800, flags=208) at mm/slab.c:3085
---snap---
First, I don't understand the size in the kmalloc() call. The size gets
definitely not provided by any of my own code. Second, what does the
cache_alloc_refill() call mean? I have the feeling that it might have
something to do with memory fragmentation as I am allocating quite a lot
of DMA buffers dynamically. However, the buffers are always multiples of
one specific size so I guess this shouldn't be a problem.
I am working with uClinux-dist-20070130 (linux-2.6.19-uc0) on a custom
board featuring an MCF5484 Coldfire processor.
I recently had to debug down through these functions for a HW bug i had
in my system. These functions are part of the heap memory allocation of
the underlying kernel. Both the SLOB and SLAB memory allocators use
this underlying functionality to divide up the heap (memory region after
BSS). I suggest debugging with SLOB as it is easier then go back to
SLAB (assuming you are using SLAB in the first place).
btw, my issue was BHE (Byte High Enable) not giving correct response
from Test and Set functionality within kernel.
hth - bob
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev