Lines Matching full:part

55 static int mlxsw_sp2_kvdl_part_find_zero_bits(struct mlxsw_sp2_kvdl_part *part,  in mlxsw_sp2_kvdl_part_find_zero_bits()  argument
64 start_bit = part->last_allocated_bit + 1; in mlxsw_sp2_kvdl_part_find_zero_bits()
65 if (start_bit == part->usage_bit_count) in mlxsw_sp2_kvdl_part_find_zero_bits()
69 bit = find_next_zero_bit(part->usage, part->usage_bit_count, bit); in mlxsw_sp2_kvdl_part_find_zero_bits()
70 if (!wrap && bit + bit_count >= part->usage_bit_count) { in mlxsw_sp2_kvdl_part_find_zero_bits()
78 if (test_bit(bit + i, part->usage)) { in mlxsw_sp2_kvdl_part_find_zero_bits()
87 static int mlxsw_sp2_kvdl_part_alloc(struct mlxsw_sp2_kvdl_part *part, in mlxsw_sp2_kvdl_part_alloc() argument
96 bit_count = DIV_ROUND_UP(size, part->indexes_per_usage_bit); in mlxsw_sp2_kvdl_part_alloc()
97 err = mlxsw_sp2_kvdl_part_find_zero_bits(part, bit_count, &bit); in mlxsw_sp2_kvdl_part_alloc()
101 __set_bit(bit + i, part->usage); in mlxsw_sp2_kvdl_part_alloc()
102 *p_kvdl_index = bit * part->indexes_per_usage_bit; in mlxsw_sp2_kvdl_part_alloc()
124 struct mlxsw_sp2_kvdl_part *part, in mlxsw_sp2_kvdl_part_free() argument
133 err = mlxsw_sp2_kvdl_rec_del(mlxsw_sp, part->info->res_type, in mlxsw_sp2_kvdl_part_free()
138 bit_count = DIV_ROUND_UP(size, part->indexes_per_usage_bit); in mlxsw_sp2_kvdl_part_free()
139 bit = kvdl_index / part->indexes_per_usage_bit; in mlxsw_sp2_kvdl_part_free()
141 __clear_bit(bit + i, part->usage); in mlxsw_sp2_kvdl_part_free()
151 struct mlxsw_sp2_kvdl_part *part = kvdl->parts[type]; in mlxsw_sp2_kvdl_alloc() local
153 return mlxsw_sp2_kvdl_part_alloc(part, size, p_entry_index); in mlxsw_sp2_kvdl_alloc()
163 struct mlxsw_sp2_kvdl_part *part = kvdl->parts[type]; in mlxsw_sp2_kvdl_free() local
165 return mlxsw_sp2_kvdl_part_free(mlxsw_sp, part, size, entry_index); in mlxsw_sp2_kvdl_free()
183 struct mlxsw_sp2_kvdl_part *part; in mlxsw_sp2_kvdl_part_init() local
205 part = kzalloc(sizeof(*part) + usage_size, GFP_KERNEL); in mlxsw_sp2_kvdl_part_init()
206 if (!part) in mlxsw_sp2_kvdl_part_init()
208 part->info = info; in mlxsw_sp2_kvdl_part_init()
209 part->usage_bit_count = usage_bit_count; in mlxsw_sp2_kvdl_part_init()
210 part->indexes_per_usage_bit = indexes_per_usage_bit; in mlxsw_sp2_kvdl_part_init()
211 part->last_allocated_bit = usage_bit_count - 1; in mlxsw_sp2_kvdl_part_init()
212 return part; in mlxsw_sp2_kvdl_part_init()
215 static void mlxsw_sp2_kvdl_part_fini(struct mlxsw_sp2_kvdl_part *part) in mlxsw_sp2_kvdl_part_fini() argument
217 kfree(part); in mlxsw_sp2_kvdl_part_fini()