Lines Matching refs:part

56 static int mlxsw_sp2_kvdl_part_find_zero_bits(struct mlxsw_sp2_kvdl_part *part,
65 start_bit = part->last_allocated_bit + 1;
66 if (start_bit == part->usage_bit_count)
70 bit = find_next_zero_bit(part->usage, part->usage_bit_count, bit);
71 if (!wrap && bit + bit_count >= part->usage_bit_count) {
79 if (test_bit(bit + i, part->usage)) {
88 static int mlxsw_sp2_kvdl_part_alloc(struct mlxsw_sp2_kvdl_part *part,
97 bit_count = DIV_ROUND_UP(size, part->indexes_per_usage_bit);
98 err = mlxsw_sp2_kvdl_part_find_zero_bits(part, bit_count, &bit);
102 __set_bit(bit + i, part->usage);
103 *p_kvdl_index = bit * part->indexes_per_usage_bit;
125 struct mlxsw_sp2_kvdl_part *part,
134 err = mlxsw_sp2_kvdl_rec_del(mlxsw_sp, part->info->res_type,
139 bit_count = DIV_ROUND_UP(size, part->indexes_per_usage_bit);
140 bit = kvdl_index / part->indexes_per_usage_bit;
142 __clear_bit(bit + i, part->usage);
152 struct mlxsw_sp2_kvdl_part *part = kvdl->parts[type];
154 return mlxsw_sp2_kvdl_part_alloc(part, size, p_entry_index);
164 struct mlxsw_sp2_kvdl_part *part = kvdl->parts[type];
166 return mlxsw_sp2_kvdl_part_free(mlxsw_sp, part, size, entry_index);
184 struct mlxsw_sp2_kvdl_part *part;
206 part = kzalloc(sizeof(*part) + usage_size, GFP_KERNEL);
207 if (!part)
209 part->info = info;
210 part->usage_bit_count = usage_bit_count;
211 part->indexes_per_usage_bit = indexes_per_usage_bit;
212 part->last_allocated_bit = usage_bit_count - 1;
213 return part;
216 static void mlxsw_sp2_kvdl_part_fini(struct mlxsw_sp2_kvdl_part *part)
218 kfree(part);