Lines Matching defs:icm

42 #include "icm.h"
79 void mlx4_free_icm(struct mlx4_dev *dev, struct mlx4_icm *icm, int coherent)
83 if (!icm)
86 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) {
95 kfree(icm);
135 struct mlx4_icm *icm;
144 icm = kmalloc_node(sizeof(*icm),
147 if (!icm) {
148 icm = kmalloc(sizeof(*icm),
150 if (!icm)
154 icm->refcount = 0;
155 INIT_LIST_HEAD(&icm->chunk_list);
176 list_add_tail(&chunk->list, &icm->chunk_list);
229 return icm;
232 mlx4_free_icm(dev, icm, coherent);
236 static int mlx4_MAP_ICM(struct mlx4_dev *dev, struct mlx4_icm *icm, u64 virt)
238 return mlx4_map_cmd(dev, MLX4_CMD_MAP_ICM, icm, virt);
247 int mlx4_MAP_ICM_AUX(struct mlx4_dev *dev, struct mlx4_icm *icm)
249 return mlx4_map_cmd(dev, MLX4_CMD_MAP_ICM_AUX, icm, -1);
266 if (table->icm[i]) {
267 ++table->icm[i]->refcount;
271 table->icm[i] = mlx4_alloc_icm(dev, MLX4_TABLE_CHUNK_SIZE >> PAGE_SHIFT,
274 if (!table->icm[i]) {
279 if (mlx4_MAP_ICM(dev, table->icm[i], table->virt +
281 mlx4_free_icm(dev, table->icm[i], table->coherent);
282 table->icm[i] = NULL;
287 ++table->icm[i]->refcount;
303 if (--table->icm[i]->refcount == 0) {
307 mlx4_free_icm(dev, table->icm[i], table->coherent);
308 table->icm[i] = NULL;
320 struct mlx4_icm *icm;
329 icm = table->icm[idx / MLX4_TABLE_CHUNK_SIZE];
332 if (!icm)
335 list_for_each_entry(chunk, &icm->chunk_list, list) {
430 table->icm = kvcalloc(num_icm, sizeof(*table->icm), GFP_KERNEL);
431 if (!table->icm)
448 table->icm[i] = mlx4_alloc_icm(dev, chunk_size >> PAGE_SHIFT,
451 if (!table->icm[i])
453 if (mlx4_MAP_ICM(dev, table->icm[i], virt + i * MLX4_TABLE_CHUNK_SIZE)) {
454 mlx4_free_icm(dev, table->icm[i], use_coherent);
455 table->icm[i] = NULL;
463 ++table->icm[i]->refcount;
470 if (table->icm[i]) {
473 mlx4_free_icm(dev, table->icm[i], use_coherent);
476 kvfree(table->icm);
486 if (table->icm[i]) {
489 mlx4_free_icm(dev, table->icm[i], table->coherent);
492 kvfree(table->icm);