slab: Update the ctor/dtor interface
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 22 Nov 2016 21:44:17 +0000 (16:44 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commiteda7a6bbedb270df3f17d17e42681691290f1096
tree386c65102777df423b8debbecb54c3ee9cd34003
parent5311ca1708a8cdf8d3da2429b58265aee84b1ffa
slab: Update the ctor/dtor interface

The priv (private) field is to support parameterized callbacks.  For
instance, you might have separate kmem_caches for different parts of a
driver.

The old 'size' field was useless, since the caller should know the size of
the object (if that's even useful).

ctor can fail, and it will respect the mem flags.  I have a couple ctors in
mind that could block, so they'll need to check MEM_WAIT/MEM_ATOMIC.

I moved the dtor out of free_to_slab since the ctor needs to call free
if it failed.  I also considered adding a batch dtor interface so we can
free a chunk of objects at once, which could amortize the overhead of
freeing.  For example, if there was an expensive operation that had to
be done after freeing any object (such as a TLB shootdown), then a batch
dtor would make sense.  It turns out that I don't need this for now, so
I opted to keep the vmem paper's API.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
15 files changed:
kern/include/slab.h
kern/src/arena.c
kern/src/blockdev.c
kern/src/ext2fs.c
kern/src/frontend.c
kern/src/hashtable.c
kern/src/kfs.c
kern/src/kmalloc.c
kern/src/kthread.c
kern/src/mm.c
kern/src/process.c
kern/src/radix.c
kern/src/slab.c
kern/src/trap.c
kern/src/vfs.c