Lines Matching refs:bali

61 	struct ba_lun_info *bali = NULL;  in ba_init()  local
78 bali = kzalloc(sizeof(struct ba_lun_info), GFP_KERNEL); in ba_init()
79 if (unlikely(!bali)) { in ba_init()
85 bali->total_aus = lun_size_au; in ba_init()
86 bali->lun_bmap_size = lun_size_au / BITS_PER_LONG; in ba_init()
89 bali->lun_bmap_size++; in ba_init()
92 bali->lun_alloc_map = kzalloc((bali->lun_bmap_size * sizeof(u64)), in ba_init()
94 if (unlikely(!bali->lun_alloc_map)) { in ba_init()
97 kfree(bali); in ba_init()
102 bali->free_aun_cnt = lun_size_au; in ba_init()
104 for (i = 0; i < bali->lun_bmap_size; i++) in ba_init()
105 bali->lun_alloc_map[i] = 0xFFFFFFFFFFFFFFFFULL; in ba_init()
108 last_word_underflow = (bali->lun_bmap_size * BITS_PER_LONG); in ba_init()
109 last_word_underflow -= bali->free_aun_cnt; in ba_init()
111 lam = &bali->lun_alloc_map[bali->lun_bmap_size - 1]; in ba_init()
119 bali->free_high_idx = bali->lun_bmap_size; in ba_init()
122 bali->aun_clone_map = kzalloc((bali->total_aus * sizeof(u8)), in ba_init()
124 if (unlikely(!bali->aun_clone_map)) { in ba_init()
127 kfree(bali->lun_alloc_map); in ba_init()
128 kfree(bali); in ba_init()
133 ba_lun->ba_lun_handle = bali; in ba_init()
137 __func__, ba_lun->lun_id, bali->lun_bmap_size, in ba_init()
138 bali->free_aun_cnt); in ba_init()
153 struct ba_lun_info *bali, int *bit_word) in find_free_range() argument
160 if (bali->lun_alloc_map[i] != 0) { in find_free_range()
161 lam = (ulong *)&bali->lun_alloc_map[i]; in find_free_range()
167 __func__, bit_pos, bali->lun_alloc_map[i], i); in find_free_range()
170 bali->free_aun_cnt--; in find_free_range()
188 struct ba_lun_info *bali = NULL; in ba_alloc() local
190 bali = ba_lun->ba_lun_handle; in ba_alloc()
194 __func__, ba_lun->lun_id, bali->free_aun_cnt); in ba_alloc()
196 if (bali->free_aun_cnt == 0) { in ba_alloc()
203 bit_pos = find_free_range(bali->free_curr_idx, in ba_alloc()
204 bali->free_high_idx, bali, &bit_word); in ba_alloc()
206 bit_pos = find_free_range(bali->free_low_idx, in ba_alloc()
207 bali->free_curr_idx, in ba_alloc()
208 bali, &bit_word); in ba_alloc()
218 bali->free_curr_idx = bit_word + 1; in ba_alloc()
220 bali->free_curr_idx = bit_word; in ba_alloc()
225 bali->free_aun_cnt); in ba_alloc()
237 static int validate_alloc(struct ba_lun_info *bali, u64 aun) in validate_alloc() argument
244 if (test_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx])) in validate_alloc()
260 struct ba_lun_info *bali = NULL; in ba_free() local
262 bali = ba_lun->ba_lun_handle; in ba_free()
264 if (validate_alloc(bali, to_free)) { in ba_free()
272 bali->free_aun_cnt); in ba_free()
274 if (bali->aun_clone_map[to_free] > 0) { in ba_free()
277 bali->aun_clone_map[to_free]); in ba_free()
278 bali->aun_clone_map[to_free]--; in ba_free()
285 set_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx]); in ba_free()
286 bali->free_aun_cnt++; in ba_free()
288 if (idx < bali->free_low_idx) in ba_free()
289 bali->free_low_idx = idx; in ba_free()
290 else if (idx > bali->free_high_idx) in ba_free()
291 bali->free_high_idx = idx; in ba_free()
295 ba_lun->lun_id, bali->free_aun_cnt); in ba_free()
309 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in ba_clone() local
311 if (validate_alloc(bali, to_clone)) { in ba_clone()
320 if (bali->aun_clone_map[to_clone] == MAX_AUN_CLONE_CNT) { in ba_clone()
326 bali->aun_clone_map[to_clone]++; in ba_clone()
339 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in ba_space() local
341 return bali->free_aun_cnt; in ba_space()
352 struct ba_lun_info *bali = ba_lun->ba_lun_handle; in cxlflash_ba_terminate() local
354 if (bali) { in cxlflash_ba_terminate()
355 kfree(bali->aun_clone_map); in cxlflash_ba_terminate()
356 kfree(bali->lun_alloc_map); in cxlflash_ba_terminate()
357 kfree(bali); in cxlflash_ba_terminate()