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

Reply via email to