My Kernel v0.1.0
slab.h
1#ifndef KERNEL_MEMORY_SLAB_H
2#define KERNEL_MEMORY_SLAB_H
3
4#include <kernel/atomic.h>
5#include <kernel/spinlock.h>
6#include <kernel/types.h>
7
9#include <utils/macro.h>
10
11/*
12 *
13 */
14struct kmem_cache {
15 llist_t slabs_full;
16 llist_t slabs_partial;
17 llist_t slabs_free;
18 spinlock_t lock;
19
20 size_t obj_size;
21 int obj_align;
22 size_t obj_real_size;
23 unsigned int coloring_offset_next;
24
25 void (*constructor)(void *data);
26 void (*destructor)(void *data);
27
28 const char *name;
29 int flags;
30};
31
32/*
33 *
34 */
35struct kmem_slab {
36 void *page;
37 struct kmem_bufctl *free;
38 struct kmem_cache *cache;
39 atomic_t refcount;
40 unsigned int coloring_offset;
41 node_t this;
42};
43
45struct kmem_cache *kmem_cache_create(const char *name, size_t obj_size,
46 int obj_align, void (*constructor)(void *),
47 void (*destructor)(void *));
48
54void *kmem_cache_alloc(struct kmem_cache *cache, int flags);
55
61void kmem_cache_destroy(struct kmem_cache *cache);
62
68void kmem_cache_free(struct kmem_cache *cache, void *obj);
69
70int kmem_cache_api_init(void);
71
72#endif /* KERNEL_MEMORY_SLAB_H */
An atomic value.
Definition: atomic.h:22
The head of a doubly linked list.
Definition: linked_list.h:43
Intrusive doubly-linked list node.
Definition: linked_list.h:27
Represents a physical pageframe.
Definition: pmm.h:73
Spinlock.
Definition: spinlock.h:29