aboutsummaryrefslogtreecommitdiff
path: root/kern/slab.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2016-06-29 15:33:29 +0200
committerRichard Braun <rbraun@sceen.net>2016-06-29 15:33:41 +0200
commit09ddf29b02c5087e02f358c2e67e27d17d3a21a7 (patch)
treeb6e40614490bfa20480f5311299e57e7b41849a4 /kern/slab.h
parent28048bc18e4d43bb15eddc82aa89685b346405f8 (diff)
downloadgnumach-09ddf29b02c5087e02f358c2e67e27d17d3a21a7.tar.gz
gnumach-09ddf29b02c5087e02f358c2e67e27d17d3a21a7.tar.bz2
gnumach-09ddf29b02c5087e02f358c2e67e27d17d3a21a7.zip
Fix locking error in the slab allocator
* kern/slab.c (kmem_slab_create): Set `slab->cache` member. (kmem_cache_reap): Return dead slabs instead of destroying in place. (slab_collect): Destroy slabs outside of critical section. * kern/slab.h (struct kmem_slab): New `cache` member.
Diffstat (limited to 'kern/slab.h')
-rw-r--r--kern/slab.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/kern/slab.h b/kern/slab.h
index 8527c9db..9d8a1156 100644
--- a/kern/slab.h
+++ b/kern/slab.h
@@ -56,6 +56,8 @@
#include <sys/types.h>
#include <vm/vm_types.h>
+struct kmem_cache;
+
#if SLAB_USE_CPU_POOLS
/*
@@ -117,6 +119,7 @@ struct kmem_buftag {
* Page-aligned collection of unconstructed buffers.
*/
struct kmem_slab {
+ struct kmem_cache *cache;
struct list list_node;
struct rbtree_node tree_node;
unsigned long nr_refs;