slab: Move the name into the kmem_cache
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 2 Nov 2016 20:44:26 +0000 (16:44 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
Instead of pointing at an arbitrary const string.  The arena qcaches will
want dynamic strings, and they can't kmalloc them.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/slab.h
kern/src/slab.c

index 583ee19..9ff8cea 100644 (file)
@@ -44,6 +44,8 @@
 #define NUM_BUF_PER_SLAB 8
 #define SLAB_LARGE_CUTOFF (PGSIZE / NUM_BUF_PER_SLAB)
 
+#define KMC_NAME_SZ                            32
+
 /* Cache creation flags: */
 #define KMC_NOTOUCH                            0x0001  /* Can't use source/object's memory */
 #define __KMC_USE_BUFCTL               0x1000  /* Internal use */
@@ -78,7 +80,6 @@ TAILQ_HEAD(kmem_slab_list, kmem_slab);
 struct kmem_cache {
        SLIST_ENTRY(kmem_cache) link;
        spinlock_t cache_lock;
-       const char *name;
        size_t obj_size;
        size_t import_amt;
        int align;
@@ -93,6 +94,7 @@ struct kmem_cache {
        struct hash_helper hh;
        struct kmem_bufctl_list *alloc_hash;
        struct kmem_bufctl_list static_hash[HASH_INIT_SZ];
+       char name[KMC_NAME_SZ];
 };
 
 /* List of all kmem_caches, sorted in order of size */
index ceee5f7..ee8288d 100644 (file)
@@ -41,7 +41,7 @@ void __kmem_cache_create(struct kmem_cache *kc, const char *name,
        assert(kc);
        assert(align);
        spinlock_init_irqsave(&kc->cache_lock);
-       kc->name = name;
+       strlcpy(kc->name, name, KMC_NAME_SZ);
        kc->obj_size = obj_size;
        /* TODO: when we are used from a qcache, we'll have a flag that tells us how
         * to set this to interact with the arena nicely. */