I was able to solve the problem by changing the set_bit() function. I'll look at this to see what you did.
Thank you very much for the help. On Thu, May 28, 2009 at 12:09 PM, b2112 <[email protected]> wrote: > I am using the 2.4 kernel with the Coldfire MCF5275 and I've found an > issue using the netflash application with programming files above 4meg. At > 4megs the following segfault error occurs. > > ----------------------------------------------------------------------------------- > Write of 58388 bytes at pos 4194304 (data at 00540000) > bad frame format: 00000000 > PC: [<040f5e00>] > SR: 2014 SP: 005a3f4c a2: f30ba003 > d0: 00000000 d1: 00000061 d2: 000006ff d3: ffffe703 > d4: 00000004 d5: 00000000 a0: 00448010 a1: 005a2000 > Process netflash (pid: 54, stackpage=005a3000) > Frame format=5 > Stack from 005a3f80: > 005745e0 03f30ba0 00000006 03e23dfc 005a3fc4 00047326 005745e0 > 03f30ba0 > 00000006 03e23dfc 00000036 00047128 00000001 00400000 03e20e14 > 03e214f8 > 03e23f14 03e23f14 00023af6 00000004 00000006 03e23dfc 00000001 > 00000000 > 00000006 00000004 00400000 ffffffda 00000036 00000000 40800000 > 003a0e94 > Call Trace: > [<00047326>] [<00047128>] [<00023af6>] > Code: bad frame format: 00000000 > PC: [<00022234>] > SR: 2714 SP: 005a3ec4 a2: 005a4000 > d0: 00000000 d1: 00000f58 d2: 00000000 d3: 003a0e94 > d4: 005a4000 d5: 00000000 a0: 040f5e00 a1: 00109178 > Process netflash (pid: 54, stackpage=005a3000) > Frame format=4 Stack from 005a3f00: > 00000004 00028730 005a3f2c 0002260c 005a3f4c 000e7fd5 005a223c > 00000036 > 005a3000 f30ba003 e23dfc00 005a3f40 00021f42 000e7d1c 005a3f4c > 00000000 > 5a3f9000 00023a30 005a3f4c 00000061 000006ff ffffe703 00000004 > 00000000 > 00448010 005a2000 f30ba003 00000000 ffffffff 00000000 54082014 > 040f5e00 > 005745e0 03f30ba0 00000006 03e23dfc 005a3fc4 00047326 005745e0 > 03f30ba0 > 00000006 03e23dfc 00000036 00047128 00000001 00400000 03e20e14 > 03e214f8 > Call Trace: > [<00028730>] [<0002260c>] [<000e7fd5>] [<00021f42>] > [<000e7d1c>] [<00023a30>] [<00047326>] [<00047128>] > [<00023af6>] > Code: 3030 2a00 2f00 4879 000e 7eb6 4eb9 0002 8730 508f > SIGSEGV > > --------------------------------------------------------------------------------------------- > > > I was able to narrow down the exact function causing the problem in > /linux-2.4.x/drivers/block/blkmem.c In general_program_func(), the function > call to set_bit() is causing the segfault. > > When the function is commented out, the application works fine. I'm still > working on the work around for this problem, but if anyone is aware of a > solution if you could let me know so I can update it. > > int general_program_func(struct inode * inode, struct file * file, struct > arena_t * a, struct blkmem_program_t * prog) > { > unsigned long i,block; > unsigned long erased = 0; > > /* Mandatory flush of all dirty buffers */ > fsync_dev(inode->i_rdev); > invalidate_buffers(inode->i_rdev); > > for(i=0;i<prog->blocks;i++) { > int min= prog->block[i].pos / a->blksize; > int max = (prog->block[i].pos + prog->block[i].length - 1) / > a->blksize; > for(block=min; block <= max; block++) { > if (!test_bit(block, &erased)) { > printk("Erase of sector at pos %lx of arena %d (address > %p)\n", block * a->blksize, MINOR(inode->i_rdev), > (void*)(a->address+block*a->blksize)); > > /* Invoke erase function */ > a->erase_func(a, block * a->blksize); > *//set_bit(block, &erased); > * } > } > > printk("Write of %lu bytes at pos %lu (data at %p)\n", > prog->block[i].length, prog->block[i].pos, prog->block[i].data); > > a->write_func(a, prog->block[i].pos, prog->block[i].length, > prog->block[i].data); > > schedule(); > } > > #ifdef CONFIG_UCLINUX > if (prog->reset) > HARD_RESET_NOW(); > #endif > return 0; > } > > Thanks > Bruce > >
_______________________________________________ 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
