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
8
#include <
libalgo/linked_list.h
>
9
#include <utils/macro.h>
10
11
/*
12
*
13
*/
14
struct
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
*/
35
struct
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
45
struct
kmem_cache *kmem_cache_create(
const
char
*name,
size_t
obj_size,
46
int
obj_align,
void
(*constructor)(
void
*),
47
void
(*destructor)(
void
*));
48
54
void
*kmem_cache_alloc(
struct
kmem_cache *cache,
int
flags);
55
61
void
kmem_cache_destroy(
struct
kmem_cache *cache);
62
68
void
kmem_cache_free(
struct
kmem_cache *cache,
void
*obj);
69
70
int
kmem_cache_api_init(
void
);
71
72
#endif
/* KERNEL_MEMORY_SLAB_H */
linked_list.h
atomic_t
An atomic value.
Definition:
atomic.h:22
linked_list_head
The head of a doubly linked list.
Definition:
linked_list.h:43
linked_list_node
Intrusive doubly-linked list node.
Definition:
linked_list.h:27
page
Represents a physical pageframe.
Definition:
pmm.h:73
spinlock
Spinlock.
Definition:
spinlock.h:29
include
kernel
memory
slab.h
Generated by
1.9.5