Fixed kmalloc bugs with incref and passing size of 0. Disabled debug printing
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 28 Aug 2009 00:58:01 +0000 (17:58 -0700)
committerPaul Pearce <pearce@eecs.berkeley.edu>
Fri, 28 Aug 2009 05:56:17 +0000 (01:56 -0400)
Long standing issues, incref fix should have been merged back on 18 June from
net-dev.  This is part of the issue of not increfing or inserting after
a page_alloc (of any sort).

The size of 0 fix should have been merged from 29 June also from net-dev.
Passing kmalloc a size of 0 can result in numerous runtime assertion failures.

Also disabled the kmalloc debug print statements.

kern/src/kmalloc.c

index ba321f1..820969c 100644 (file)
@@ -11,7 +11,7 @@
 #include <kmalloc.h>
 #include <stdio.h>
 
 #include <kmalloc.h>
 #include <stdio.h>
 
-#define kmallocdebug(args...)  printk(args)
+#define kmallocdebug(args...)  //printk(args)
 
 char*BND(end, maxaddrpa_ptr + IVY_KERNBASE) boot_freemem;
 static page_list_t pages_list; //List of physical pages used by kmalloc
 
 char*BND(end, maxaddrpa_ptr + IVY_KERNBASE) boot_freemem;
 static page_list_t pages_list; //List of physical pages used by kmalloc
@@ -90,6 +90,9 @@ void kmalloc_init()
 
 void* kmalloc(size_t size, int flags) 
 {
 
 void* kmalloc(size_t size, int flags) 
 {
+       if (size == 0)
+               return NULL;
+
        int npages = ROUNDUP(size, PGSIZE) / PGSIZE;
        
        // Find 'npages' free consecutive pages
        int npages = ROUNDUP(size, PGSIZE) / PGSIZE;
        
        // Find 'npages' free consecutive pages
@@ -115,6 +118,7 @@ void* kmalloc(size_t size, int flags)
        for(int i=0; i<npages; i++) {
                page_t* page;
                page_alloc_specific(&page, first+i);
        for(int i=0; i<npages; i++) {
                page_t* page;
                page_alloc_specific(&page, first+i);
+               page_incref(page);
                page->num_cons_links = npages-i;
                LIST_INSERT_HEAD(&pages_list, page, global_link);
                kmallocdebug("mallocing page: %u\n", first+i);
                page->num_cons_links = npages-i;
                LIST_INSERT_HEAD(&pages_list, page, global_link);
                kmallocdebug("mallocing page: %u\n", first+i);