xref: /haiku/src/system/kernel/slab/slab_private.h (revision c237c4ce593ee823d9867fd997e51e4c447f5623)
1 /*
2  * Copyright 2007, Hugo Santos. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Hugo Santos, hugosantos@gmail.com
7  */
8 #ifndef SLAB_PRIVATE_H
9 #define SLAB_PRIVATE_H
10 
11 
12 #include <stddef.h>
13 
14 #include <slab/Slab.h>
15 
16 
17 static const size_t kMinObjectAlignment = 8;
18 
19 
20 void		request_memory_manager_maintenance();
21 
22 void*		block_alloc_early(size_t size);
23 void		block_allocator_init_boot();
24 void		block_allocator_init_rest();
25 
26 
27 template<typename Type>
28 static inline Type*
29 _pop(Type*& head)
30 {
31 	Type* oldHead = head;
32 	head = head->next;
33 	return oldHead;
34 }
35 
36 
37 template<typename Type>
38 static inline void
39 _push(Type*& head, Type* object)
40 {
41 	object->next = head;
42 	head = object;
43 }
44 
45 
46 static inline void*
47 slab_internal_alloc(size_t size, uint32 flags)
48 {
49 	if (flags & CACHE_DURING_BOOT)
50 		return block_alloc_early(size);
51 
52 	return malloc_etc(size, flags);
53 }
54 
55 
56 static inline void
57 slab_internal_free(void* buffer, uint32 flags)
58 {
59 	free_etc(buffer, flags);
60 }
61 
62 
63 #endif	// SLAB_PRIVATE_H
64