[BACK]Return to kern_mem.c CVS log [TXT][DIR] Up to [local] / funnyos / kern

Diff for /funnyos/kern/kern_mem.c between version 1.4 and 1.7

version 1.4, 2007/10/16 13:45:16 version 1.7, 2007/10/26 14:15:20
Line 5 
Line 5 
 #include <sys/mem.h>  #include <sys/mem.h>
 #include <libkern/printf.h>  #include <libkern/printf.h>
   
 #define KMEM_DEBUG  /* #define KMEM_DEBUG */
   
 #ifdef KMEM_DEBUG  #ifdef KMEM_DEBUG
 #define DPRINTF(x...)   do { printf(x); } while (0)  #define DPRINTF(x...)   do { printf(x); } while (0)
Line 125 
Line 125 
         DPRINTF("kmalloc: requested %d bytes (%d pages) of %d free pages; ", nbytes, npages, freepages);          DPRINTF("kmalloc: requested %d bytes (%d pages) of %d free pages; ", nbytes, npages, freepages);
   
         /* check if we have enough free pages */          /* check if we have enough free pages */
         if (npages >= freepages) {          if (npages > freepages) {
                 DPRINTF("not enough free pages\n");                  DPRINTF("not enough free pages\n");
                 return(NULL);                  return(NULL);
         }          }
Line 158 
Line 158 
                                         /* rewind pointer to the first byte */                                          /* rewind pointer to the first byte */
                                         firstpageptr = lastpageptr - ((npages - 1));                                          firstpageptr = lastpageptr - ((npages - 1));
   
                                         offbits = nmbmbits;  
                                         /* fill this (npages pages) region with zeroes */                                          /* fill this (npages pages) region with zeroes */
                                         while(firstpageptr <= lastpageptr) {                                          while(firstpageptr <= lastpageptr) {
   
                                                 /* TODO invalidate page in membmap */                                                  /* TODO invalidate page in membmap */
                                                 offbytes = ((uint32_t)firstpageptr - (uint32_t)allocbase) / (KMEM_PAGESIZE * 8);                                                  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);  //                                              printf("membmap[%d] |= 1 << %d\n", offbytes, offbits);
                                                 membmap[offbytes] |= 1 << offbits;                                                  membmap[offbytes] |= 1 << offbits;
   
Line 184 
Line 187 
                                         firstpageptr = lastpageptr - ((npages - 1));                                          firstpageptr = lastpageptr - ((npages - 1));
   
                                         /* got it */                                          /* 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 */                                          /* decrement system free pages */
                                         freepages -= npages;                                          freepages -= npages;

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.7

CVSweb