=================================================================== RCS file: /cvs/funnyos/kern/kern_mem.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- funnyos/kern/kern_mem.c 2007/10/26 11:59:12 1.6 +++ funnyos/kern/kern_mem.c 2007/10/26 14:15:20 1.7 @@ -1,5 +1,5 @@ /* - * $Id: kern_mem.c,v 1.6 2007/10/26 10:59:12 init Exp $ + * $Id: kern_mem.c,v 1.7 2007/10/26 13:15:20 init Exp $ */ #include #include @@ -158,13 +158,16 @@ /* rewind pointer to the first byte */ firstpageptr = lastpageptr - ((npages - 1)); - offbits = nmbmbits; /* fill this (npages pages) region with zeroes */ while(firstpageptr <= lastpageptr) { /* TODO invalidate page in membmap */ offbytes = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE * 8); -// printf("offbytes=%d\n", offbytes); + offbits = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE); + + if (offbits > 7) + offbits -= 8 * (offbits / 8); + // printf("membmap[%d] |= 1 << %d\n", offbytes, offbits); membmap[offbytes] |= 1 << offbits; @@ -184,7 +187,7 @@ firstpageptr = lastpageptr - ((npages - 1)); /* got it */ - DPRINTF("allocated, addr=0x%x len=0x%x [0x%x-0x%x]\n", firstpageptr, npages * KMEM_PAGESIZE, firstpageptr, lastpageptr); + DPRINTF("allocated, addr=0x%x len=%d [0x%x-0x%x]\n", firstpageptr, npages * KMEM_PAGESIZE, firstpageptr, lastpageptr); /* decrement system free pages */ freepages -= npages;