Removes __proc_set_allcores()
[akaros.git] / kern / src / kmalloc.c
index 9ff4592..2c60671 100644 (file)
 #define SINIT(x) x
 #endif
 
+#ifdef __DEPUTY__
+#pragma nodeputy
+#endif
+
 #include <ros/common.h>
-#include <ros/error.h>
+#include <error.h>
 #include <pmap.h>
 #include <kmalloc.h>
 #include <stdio.h>
@@ -74,6 +78,8 @@ void *boot_calloc(uint32_t n, size_t sz, uint32_t align)
 struct kmem_cache *kmalloc_caches[NUM_KMALLOC_CACHES];
 void kmalloc_init(void)
 {
+       // i want to know if we ever make the tag bigger (should be below 16 bytes)
+       static_assert(sizeof(struct kmalloc_tag) <= KMALLOC_ALIGNMENT);
        // build caches of common sizes
        size_t ksize = KMALLOC_SMALLEST;
        for (int i = 0; i < NUM_KMALLOC_CACHES; i++) {
@@ -105,6 +111,7 @@ void *kmalloc(size_t size, int flags)
                struct kmalloc_tag *tag = buf;
                tag->flags = KMALLOC_TAG_PAGES;
                tag->num_pages = num_pgs;
+               tag->canary = KMALLOC_CANARY;
                return buf + KMALLOC_OFFSET;
        }
        // else, alloc from the appropriate cache
@@ -115,6 +122,7 @@ void *kmalloc(size_t size, int flags)
        struct kmalloc_tag *tag = buf;
        tag->flags = KMALLOC_TAG_CACHE;
        tag->my_cache = kmalloc_caches[cache_id];
+       tag->canary = KMALLOC_CANARY;
        return buf + KMALLOC_OFFSET;
 }
 
@@ -128,8 +136,10 @@ void *krealloc(void* buf, size_t size, int flags) {
 
 void kfree(void *addr)
 {
-       assert(addr);
+       if(addr == NULL)
+               return;
        struct kmalloc_tag *tag = (struct kmalloc_tag*)(addr - KMALLOC_OFFSET);
+       assert(tag->canary == KMALLOC_CANARY);
        if (tag->flags & KMALLOC_TAG_CACHE)
                kmem_cache_free(tag->my_cache, addr - KMALLOC_OFFSET);
        else if (tag->flags & KMALLOC_TAG_PAGES) {