Lines Matching refs:bali
64 struct ba_lun_info *bali = NULL; in ba_init() local
81 bali = kzalloc(sizeof(struct ba_lun_info), GFP_KERNEL); in ba_init()
82 if (unlikely(!bali)) { in ba_init()
88 bali->total_aus = lun_size_au; in ba_init()
89 bali->lun_bmap_size = lun_size_au / BITS_PER_LONG; in ba_init()
92 bali->lun_bmap_size++; in ba_init()
95 bali->lun_alloc_map = kzalloc((bali->lun_bmap_size * sizeof(u64)), in ba_init()
97 if (unlikely(!bali->lun_alloc_map)) { in ba_init()
100 kfree(bali); in ba_init()
105 bali->free_aun_cnt = lun_size_au; in ba_init()
107 for (i = 0; i < bali->lun_bmap_size; i++) in ba_init()
108 bali->lun_alloc_map[i] = 0xFFFFFFFFFFFFFFFFULL; in ba_init()
111 last_word_underflow = (bali->lun_bmap_size * BITS_PER_LONG); in ba_init()
112 last_word_underflow -= bali->free_aun_cnt; in ba_init()
114 lam = &bali->lun_alloc_map[bali->lun_bmap_size - 1]; in ba_init()
122 bali->free_high_idx = bali->lun_bmap_size; in ba_init()
125 bali->aun_clone_map = kzalloc((bali->total_aus * sizeof(u8)), in ba_init()
127 if (unlikely(!bali->aun_clone_map)) { in ba_init()
130 kfree(bali->lun_alloc_map); in ba_init()
131 kfree(bali); in ba_init()
136 ba_lun->ba_lun_handle = bali; in ba_init()
140 __func__, ba_lun->lun_id, bali->lun_bmap_size, in ba_init()
141 bali->free_aun_cnt); in ba_init()
156 struct ba_lun_info *bali, int *bit_word) in find_free_range() argument
163 if (bali->lun_alloc_map[i] != 0) { in find_free_range()
164 lam = (ulong *)&bali->lun_alloc_map[i]; in find_free_range()
170 __func__, bit_pos, bali->lun_alloc_map[i], in find_free_range()
174 bali->free_aun_cnt--; in find_free_range()
192 struct ba_lun_info *bali = NULL; in ba_alloc() local
194 bali = ba_lun->ba_lun_handle; in ba_alloc()
198 __func__, ba_lun->lun_id, bali->free_aun_cnt); in ba_alloc()
200 if (bali->free_aun_cnt == 0) { in ba_alloc()
207 bit_pos = find_free_range(bali->free_curr_idx, in ba_alloc()
208 bali->free_high_idx, bali, &bit_word); in ba_alloc()
210 bit_pos = find_free_range(bali->free_low_idx, in ba_alloc()
211 bali->free_curr_idx, in ba_alloc()
212 bali, &bit_word); in ba_alloc()
222 bali->free_curr_idx = bit_word + 1; in ba_alloc()
224 bali->free_curr_idx = bit_word; in ba_alloc()
229 bali->free_aun_cnt); in ba_alloc()
241 static int validate_alloc(struct ba_lun_info *bali, u64 aun) in validate_alloc() argument
248 if (test_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx])) in validate_alloc()
264 struct ba_lun_info *bali = NULL; in ba_free() local
266 bali = ba_lun->ba_lun_handle; in ba_free()
268 if (validate_alloc(bali, to_free)) { in ba_free()
276 bali->free_aun_cnt); in ba_free()
278 if (bali->aun_clone_map[to_free] > 0) { in ba_free()
281 bali->aun_clone_map[to_free]); in ba_free()
282 bali->aun_clone_map[to_free]--; in ba_free()
289 set_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx]); in ba_free()
290 bali->free_aun_cnt++; in ba_free()
292 if (idx < bali->free_low_idx) in ba_free()
293 bali->free_low_idx = idx; in ba_free()
294 else if (idx > bali->free_high_idx) in ba_free()
295 bali->free_high_idx = idx; in ba_free()
299 ba_lun->lun_id, bali->free_aun_cnt); in ba_free()
313 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in ba_clone() local
315 if (validate_alloc(bali, to_clone)) { in ba_clone()
324 if (bali->aun_clone_map[to_clone] == MAX_AUN_CLONE_CNT) { in ba_clone()
330 bali->aun_clone_map[to_clone]++; in ba_clone()
343 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in ba_space() local
345 return bali->free_aun_cnt; in ba_space()
356 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in cxlflash_ba_terminate() local
358 if (bali) { in cxlflash_ba_terminate()
359 kfree(bali->aun_clone_map); in cxlflash_ba_terminate()
360 kfree(bali->lun_alloc_map); in cxlflash_ba_terminate()
361 kfree(bali); in cxlflash_ba_terminate()