slab: Add an arena pointer to the interface
[akaros.git] / kern / include / slab.h
index 41282d6..7f1e7d0 100644 (file)
@@ -32,6 +32,8 @@
 #include <arch/mmu.h>
 #include <sys/queue.h>
 #include <atomic.h>
+#include <hash_helper.h>
+#include <arena.h>
 
 /* Back in the day, their cutoff for "large objects" was 512B, based on
  * measurements and on not wanting more than 1/8 of internal fragmentation. */
@@ -72,12 +74,16 @@ struct kmem_cache {
        size_t obj_size;
        int align;
        int flags;
+       struct arena *source;
        struct kmem_slab_list full_slab_list;
        struct kmem_slab_list partial_slab_list;
        struct kmem_slab_list empty_slab_list;
        void (*ctor)(void *, size_t);
        void (*dtor)(void *, size_t);
        unsigned long nr_cur_alloc;
+       struct hash_helper hh;
+       struct kmem_bufctl_list *alloc_hash;
+       struct kmem_bufctl_list static_hash[HASH_INIT_SZ];
 };
 
 /* List of all kmem_caches, sorted in order of size */
@@ -87,6 +93,7 @@ extern struct kmem_cache_list kmem_caches;
 /* Cache management */
 struct kmem_cache *kmem_cache_create(const char *name, size_t obj_size,
                                      int align, int flags,
+                                     struct arena *source,
                                      void (*ctor)(void *, size_t),
                                      void (*dtor)(void *, size_t));
 void kmem_cache_destroy(struct kmem_cache *cp);
@@ -99,6 +106,7 @@ void kmem_cache_reap(struct kmem_cache *cp);
 /* Low-level interface for initializing a cache. */
 void __kmem_cache_create(struct kmem_cache *kc, const char *name,
                          size_t obj_size, int align, int flags,
+                         struct arena *source,
                          void (*ctor)(void *, size_t),
                          void (*dtor)(void *, size_t));