linuxppc_2_4_devel stability problem?
Joakim Tjernlund
joakim.tjernlund at lumentis.se
Fri Nov 22 19:58:33 EST 2002
Hi
Tested your program on a 128MB RAM,mpc862,linuxppc_2_4_devel,rc2 and it runs just fine.
Has been running for some 30 minutes(140 rounds) now.
Jocke
>
>
>
> Hi,
> I have ported the latest linuxppc_2_4_devel from bk://ppc.bkbits.net
> to my mpc755(with mpc8250 as slave). I test a simple program, which
> does malloc&free variable length memory forever. I always get SIGSEGV
> shortly(less than 10 minutes) after I run the program. I have the problem with
> linuxppc-2.4.16 before, and I think it may be solved in the latest version, but
> it doesn't.
>
> My mpc755 works under 400Mhz, with 64M SDRAM. Though the totoal
> memory I malloced is large than 64M sometime, since I don't use it but
> only remember the address the malloc returns, and free it with the address later.
> It will always failed when to free some a remembered address.
>
> I think linux won't alloc the real page until a reference to the memory occurs,
> with which a page fault will leads to a real page mapped. So where is the SIGSEGV
> from. I am also not sure whether the libc is compatible with this version of linux or
> not. Anyway, I'd rather believe it's the kernel problem.
>
> Does anybody have some ideas on it? Or, maybe you are interested in my test
> program, why not try! Here it is.
>
> BTW, I have wrote another program, it will crash the 2.4.16, and if you are interested
> too, I can mail to you for free:).
>
> Thanks
> Shenrong
>
>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <signal.h>
>
>
> #define M_TIME 10240
>
> int i, j, k = 0;
> int size;
> char *p[M_TIME];
>
> char block[10240];
>
> int ii, jj = 0;
> struct sigaction sSEGVAction;
>
> void SEGVHandler (int iSignal)
> {
> jj = 0;
> printf("\nsig err: dump: \n\n");
> printf("i=%d, j=%d, k=%d, p[i]=0x%08x\n", i, j, k, p[i]);
>
> #if 0
> for(ii=0; ii<M_TIME; ii++) {
> if(jj == 0)
> printf("%04d ", ii);
>
> printf(" %08x", p[ii]);
> jj++;
> if(jj == 10) {
> printf("\n");
> jj = 0;
> }
> }
> #endif
>
> exit(-1);
> }
>
>
> int main(int argc, char **argv)
> {
> sSEGVAction.sa_handler = SEGVHandler;
> sSEGVAction.sa_flags = SA_RESTART;
> sigemptyset ( &sSEGVAction.sa_mask );
> sigaction ( SIGSEGV, &sSEGVAction, NULL );
>
> while(1) {
> k++;
> printf("%d round start\n\n", k);
>
> for(j=1; j<10; j++) {
> size = 0;
>
> for(i=0; i<M_TIME; i++) {
> p[i] = malloc(i * j);
> if(!p[i]) {
> printf("malloc failed at %d\n", i);
> return -1;
> }
> size += i * j;
> #if 0
> if(i * j > 0)
> {
> int len = i * j;
> char *ptr = p[i];
> int n;
>
> memset(ptr, 0xaa, len);
>
> for(n=0; n<len; n++) {
> if(ptr[n] != 0xaa) {
> printf("memory write check error: i=%d, j=%d, k=%d, p[i]=0x%08x, n=%d, err=%d\n", i, j, k, p[i], n, ptr[n]);
> exit(-1);
> }
> }
> }
> #endif
> }
>
> printf("loop %d: malloc %d bytes totally succeed...", j, size);
>
> for(i=0; i<M_TIME; i++)
> free(p[i]);
>
> printf("freed\n");
> }
> }
> return 0;
> }
>
>
>
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list