Set errno when only errstr was called
[akaros.git] / kern / src / colored_caches.c
index 6796409..bec3819 100644 (file)
 
 #include <ros/common.h>
 #include <arch/mmu.h>
-#include <arch/bitmask.h>
+#include <bitmask.h>
 #include <colored_caches.h>
 #include <stdio.h>
 #include <atomic.h>
 #include <kmalloc.h>
+#include <page_alloc.h>
 
 #define l1 (available_caches.l1)
 #define l2 (available_caches.l2)
 #define l3 (available_caches.l3)
 
-spinlock_t cache_colors_lock;
+spinlock_t cache_colors_lock = SPINLOCK_INITIALIZER_IRQSAVE;
 
 /************** Cache Related Functions  *****************/
 inline void init_cache_properties(cache_t *c, size_t sz_k, size_t wa, size_t clsz) {
@@ -30,9 +31,13 @@ inline void init_cache_properties(cache_t *c, size_t sz_k, size_t wa, size_t cls
        c->sz_k = SINIT(sz_k);
        c->clsz = SINIT(clsz);
 
+#ifdef CONFIG_PAGE_COLORING
        //Added as optimization (derived from above);
        size_t nc = get_cache_num_page_colors(c);
        c->num_colors = SINIT(nc);
+#else
+       c->num_colors = 1;
+#endif
 }
 
 inline void init_free_cache_colors_map(cache_t* c) 
@@ -237,14 +242,20 @@ static inline void __cache_color_free(cache_t* c, uint8_t* colors_map)
 }
 
 uint8_t* cache_colors_map_alloc() {
+#ifdef CONFIG_PAGE_COLORING
        uint8_t* colors_map = kmalloc(llc_cache->num_colors, 0);
        if(colors_map)
                CLR_BITMASK(colors_map, llc_cache->num_colors);
        return colors_map;
+#else
+       return global_cache_colors_map;
+#endif
 }
 
 void cache_colors_map_free(uint8_t* colors_map) {
+#ifdef CONFIG_PAGE_COLORING
        kfree(colors_map);
+#endif
 }
 
 error_t cache_color_alloc(cache_t* c, uint8_t* colors_map)