Arax -8d09c51940345c86062e8ef2427c705ae66e5926
A Runtime Framework for Decoupling Applications from Heterogeneous Accelerators
Loading...
Searching...
No Matches
tlsf/alloc.c
Go to the documentation of this file.
1#include "arch/alloc.h"
2#include "tlsf.h"
3
5{
7 tlsf_t root;
9};
10
11int arch_alloc_init_once(arch_alloc_s *_alloc, size_t size)
12{
13 struct arch_alloc_inner_s *alloc = (struct arch_alloc_inner_s *) _alloc;
14
15 void *usable_area = alloc + 1;
16
17 utils_spinlock_init(&(alloc->lock));
18 alloc->root = tlsf_create_with_pool(usable_area, size - sizeof(struct arch_alloc_inner_s));
19
20 return 0;
21}
22
25
26void* arch_alloc_allocate(arch_alloc_s *_alloc, size_t size)
27{
28 struct arch_alloc_inner_s *alloc = (struct arch_alloc_inner_s *) _alloc;
29 void *data;
30
31 #ifdef ALLOC_STATS
34 #endif
35
36 utils_spinlock_lock(&(alloc->lock));
37 data = tlsf_malloc(alloc->root, size);
38 utils_spinlock_unlock(&(alloc->lock));
39
40 #ifdef ALLOC_STATS
41 utils_timer_set(dt, stop);
42 __sync_fetch_and_add(&(_alloc->alloc_ns[!!data]),
44 __sync_fetch_and_add(&(_alloc->allocs[!!data]), 1);
45 #endif
46 return data;
47}
48
49void _arch_alloc_free(arch_alloc_s *_alloc, void *mem)
50{
51 struct arch_alloc_inner_s *alloc = (struct arch_alloc_inner_s *) _alloc;
52
53 #ifdef ALLOC_STATS
56 #endif
57
58 utils_spinlock_lock(&(alloc->lock));
59 tlsf_free(alloc->root, mem);
60 utils_spinlock_unlock(&(alloc->lock));
61
62 #ifdef ALLOC_STATS
63 utils_timer_set(dt, stop);
64 __sync_fetch_and_add(&(_alloc->free_ns),
66 __sync_fetch_and_add(&(_alloc->frees), 1);
67 #endif
68}
69
71{
72 struct arch_alloc_inner_s *alloc = (struct arch_alloc_inner_s *) _alloc;
73
74 tlsf_destroy(alloc->root);
75}
76
78{
79 arch_alloc_stats_s stats = { 0 };
80
81 #ifdef ALLOC_STATS
82 stats.allocs[0] = _alloc->allocs[0];
83 stats.allocs[1] = _alloc->allocs[1];
84 stats.frees = _alloc->frees;
85 stats.alloc_ns[0] = _alloc->alloc_ns[0];
86 stats.alloc_ns[1] = _alloc->alloc_ns[1];
87 stats.free_ns = _alloc->free_ns;
88 #endif
89 return stats;
90}
91
93{
94 void (*inspector)(void *start, void *end, size_t size, void *arg);
95 void *arg;
96};
97
98void inspect_walker(void *ptr, size_t size, int used, void *user)
99{
100 struct inspect_walker_state *iws = (struct inspect_walker_state *) user;
101
102 iws->inspector(ptr, ptr + size, used * size, iws->arg);
103}
104
105void arch_alloc_inspect(arch_alloc_s *_alloc, void (*inspector)(void *start, void *end, size_t size,
106 void *arg), void *arg)
107{
108 struct arch_alloc_inner_s *alloc = (struct arch_alloc_inner_s *) _alloc;
109 struct inspect_walker_state iws = { inspector, arg };
110
111 tlsf_walk_pool(tlsf_get_pool(alloc->root), inspect_walker, &iws);
112}
113
114void* arax_mmap(size_t s)
115{
116 return 0;
117}
118
119void* arax_ummap(void *a, size_t s)
120{
121 return 0;
122}
123
125{
126 return parent;
127}
128
130{
131 return 0;
132}
struct arch_alloc_s arch_alloc_s
Definition arax_types.h:96
struct utils_bitmap utils_bitmap_s
volatile uint32_t utils_spinlock
Definition spinlock.h:10
#define utils_timer_get_duration_ns(NAME)
Definition timer.h:82
#define utils_timer_set(NAME, WHAT)
Definition timer.h:13
#define utils_spinlock_lock(V)
Definition queue.c:35
#define utils_spinlock_init(V)
Definition queue.c:34
#define utils_spinlock_unlock(V)
Definition queue.c:36
utils_spinlock lock
Definition tlsf/alloc.c:8
void(* inspector)(void *start, void *end, size_t size, void *arg)
Definition tlsf/alloc.c:94
void * arax_ummap(void *a, size_t s)
Definition tlsf/alloc.c:119
arch_alloc_s * arch_alloc_create_sub_alloc(arch_alloc_s *parent)
Definition tlsf/alloc.c:124
int arch_alloc_init_once(arch_alloc_s *_alloc, size_t size)
Definition tlsf/alloc.c:11
utils_bitmap_s * arch_alloc_get_bitmap()
Definition tlsf/alloc.c:129
void * arax_mmap(size_t s)
Definition tlsf/alloc.c:114
arch_alloc_stats_s arch_alloc_stats(arch_alloc_s *_alloc)
Definition tlsf/alloc.c:77
void inspect_walker(void *ptr, size_t size, int used, void *user)
Definition tlsf/alloc.c:98
void arch_alloc_inspect(arch_alloc_s *_alloc, void(*inspector)(void *start, void *end, size_t size, void *arg), void *arg)
Definition tlsf/alloc.c:105
void arch_alloc_exit(arch_alloc_s *_alloc)
Definition tlsf/alloc.c:70
void arch_alloc_init_always(arch_alloc_s *alloc)
Definition tlsf/alloc.c:23
void * arch_alloc_allocate(arch_alloc_s *_alloc, size_t size)
Definition tlsf/alloc.c:26
void _arch_alloc_free(arch_alloc_s *_alloc, void *mem)
Definition tlsf/alloc.c:49