Lines Matching refs:mm

11 		    struct rknpu_mm **mm)  in rknpu_mm_create()  argument
23 *mm = kzalloc(sizeof(struct rknpu_mm), GFP_KERNEL); in rknpu_mm_create()
24 if (!(*mm)) in rknpu_mm_create()
27 (*mm)->chunk_size = chunk_size; in rknpu_mm_create()
28 (*mm)->total_chunks = mem_size / chunk_size; in rknpu_mm_create()
29 (*mm)->free_chunks = (*mm)->total_chunks; in rknpu_mm_create()
32 ((*mm)->total_chunks + BITS_PER_LONG - 1) / BITS_PER_LONG; in rknpu_mm_create()
34 (*mm)->bitmap = kcalloc(num_of_longs, sizeof(long), GFP_KERNEL); in rknpu_mm_create()
35 if (!(*mm)->bitmap) { in rknpu_mm_create()
40 mutex_init(&(*mm)->lock); in rknpu_mm_create()
42 LOG_DEBUG("total_chunks: %d, bitmap: %p\n", (*mm)->total_chunks, in rknpu_mm_create()
43 (*mm)->bitmap); in rknpu_mm_create()
48 kfree(mm); in rknpu_mm_create()
52 void rknpu_mm_destroy(struct rknpu_mm *mm) in rknpu_mm_destroy() argument
54 if (mm != NULL) { in rknpu_mm_destroy()
55 mutex_destroy(&mm->lock); in rknpu_mm_destroy()
56 kfree(mm->bitmap); in rknpu_mm_destroy()
57 kfree(mm); in rknpu_mm_destroy()
61 int rknpu_mm_alloc(struct rknpu_mm *mm, unsigned int size, in rknpu_mm_alloc() argument
69 if (size > mm->total_chunks * mm->chunk_size) in rknpu_mm_alloc()
78 mutex_lock(&mm->lock); in rknpu_mm_alloc()
82 found = find_next_zero_bit(mm->bitmap, mm->total_chunks, start_search); in rknpu_mm_alloc()
85 if (found == mm->total_chunks) in rknpu_mm_alloc()
93 if (size <= mm->chunk_size) { in rknpu_mm_alloc()
94 set_bit(found, mm->bitmap); in rknpu_mm_alloc()
99 cur_size = size - mm->chunk_size; in rknpu_mm_alloc()
102 mm->bitmap, mm->total_chunks, ++found); in rknpu_mm_alloc()
116 if (found == mm->total_chunks) in rknpu_mm_alloc()
120 if (cur_size <= mm->chunk_size) in rknpu_mm_alloc()
123 cur_size -= mm->chunk_size; in rknpu_mm_alloc()
130 set_bit(found, mm->bitmap); in rknpu_mm_alloc()
133 mm->free_chunks -= ((*mm_obj)->range_end - (*mm_obj)->range_start + 1); in rknpu_mm_alloc()
134 mutex_unlock(&mm->lock); in rknpu_mm_alloc()
142 mutex_unlock(&mm->lock); in rknpu_mm_alloc()
148 int rknpu_mm_free(struct rknpu_mm *mm, struct rknpu_mm_obj *mm_obj) in rknpu_mm_free() argument
159 mutex_lock(&mm->lock); in rknpu_mm_free()
163 clear_bit(bit, mm->bitmap); in rknpu_mm_free()
165 mm->free_chunks += (mm_obj->range_end - mm_obj->range_start + 1); in rknpu_mm_free()
167 mutex_unlock(&mm->lock); in rknpu_mm_free()
180 struct rknpu_mm *mm = NULL; in rknpu_mm_dump() local
189 mm = rknpu_dev->sram_mm; in rknpu_mm_dump()
190 if (mm == NULL) in rknpu_mm_dump()
194 mm->chunk_size / 1024); in rknpu_mm_dump()
196 rbot = cur = find_first_bit(mm->bitmap, mm->total_chunks); in rknpu_mm_dump()
204 while (cur < mm->total_chunks) { in rknpu_mm_dump()
206 cur = find_next_bit(mm->bitmap, mm->total_chunks, cur + 1); in rknpu_mm_dump()
207 if (cur < mm->total_chunks && cur <= rtop + 1) in rknpu_mm_dump()
232 free_size = mm->free_chunks * mm->chunk_size; in rknpu_mm_dump()