slab: add __kmem_cache_destroy()
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 27 Sep 2019 15:22:26 +0000 (11:22 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Oct 2019 21:11:11 +0000 (17:11 -0400)
Like __kmem_cache_create(), it operates on a KC whose memory is managed
by the caller.

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

index 509b823..f014f83 100644 (file)
@@ -162,12 +162,13 @@ void kmem_cache_free(struct kmem_cache *cp, void *buf);
 void kmem_cache_init(void);
 void kmem_cache_reap(struct kmem_cache *cp);
 unsigned int kmc_nr_pcpu_caches(void);
-/* Low-level interface for initializing a cache. */
+/* Low-level interface for creating/destroying; caller manages kc's memory */
 void __kmem_cache_create(struct kmem_cache *kc, const char *name,
                          size_t obj_size, int align, int flags,
                          struct arena *source,
                          int (*ctor)(void *, void *, int),
                          void (*dtor)(void *, void *), void *priv);
+void __kmem_cache_destroy(struct kmem_cache *cp);
 
 /* Tracing */
 int kmem_trace_start(struct kmem_cache *kc);
index 995ba31..0ebc730 100644 (file)
@@ -490,7 +490,7 @@ static void kmem_slab_destroy(struct kmem_cache *cp, struct kmem_slab *a_slab)
 
 /* Once you call destroy, never use this cache again... o/w there may be weird
  * races, and other serious issues.  */
-void kmem_cache_destroy(struct kmem_cache *cp)
+void __kmem_cache_destroy(struct kmem_cache *cp)
 {
        struct kmem_slab *a_slab, *next;
 
@@ -520,6 +520,11 @@ void kmem_cache_destroy(struct kmem_cache *cp)
        }
        spin_unlock_irqsave(&cp->cache_lock);
        kmem_trace_warn_notempty(cp);
+}
+
+void kmem_cache_destroy(struct kmem_cache *cp)
+{
+       __kmem_cache_destroy(cp);
        kmem_cache_free(kmem_cache_cache, cp);
 }