Messages in this thread | | | Subject | Re: Buggy variable-length array code...or compiler? | From | "Steven J. Magnani" <> | Date | Fri, 26 Feb 2010 13:15:01 -0600 |
| |
On Thu, 25 Feb 2010, Steven J. Magnani wrote: > > > > > When I run a memcpy dmatest with a Microblaze 2.6.33 noMMU kernel, the > > > system crashes after about 400 iterations. After much head scratching, I > > > believe I've narrowed the problem to this fragment of code in > > > drivers/dma/dmatest.c: > > > > > > static int dmatest_func(void *data) > > > { > > > ... > > > int src_cnt; > > > int dst_cnt; > > > ... > > > if (thread->type == DMA_MEMCPY) > > > src_cnt = dst_cnt = 1; > > > ... > > > while (!kthread_should_stop() > > > && !(iterations && total_tests >= iterations)) { > > > ... > > > dma_addr_t dma_srcs[src_cnt]; > > > dma_addr_t dma_dsts[dst_cnt]; > > > ...
On Thu, Feb 25, 2010 at 03:46:48PM -0800, David Rientjes wrote: > > This could probably become the first kernel user of the flexible array > > library (see Documentation/flexible-arrays.txt). Dan? > > --
On Fri, 2010-02-26 at 13:27 +0300, Dan Carpenter wrote: > I think the max that src_cnt can be is 3 and the most dst_cnt can be is 2. > We could just put that there.
src_cnt is dependent on module parameters.
The bug goes away if dma_srcs and dma_dsts are declared outside the loop, but that requires knocking the loop in another tabstop. At that point dmatest_func() would be begging for refactoring.
Regards, ------------------------------------------------------------------------ Steven J. Magnani "I claim this network for MARS! www.digidescorp.com Earthling, return my space modulator!"
#include <standard.disclaimer>
| |