diff options
author | Richard Braun <rbraun@sceen.net> | 2016-06-29 15:33:29 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2016-06-29 15:33:41 +0200 |
commit | 09ddf29b02c5087e02f358c2e67e27d17d3a21a7 (patch) | |
tree | b6e40614490bfa20480f5311299e57e7b41849a4 /kern/slab.h | |
parent | 28048bc18e4d43bb15eddc82aa89685b346405f8 (diff) | |
download | gnumach-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.h | 3 |
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; |