Lines Matching refs:icm

88 void mthca_free_icm(struct mthca_dev *dev, struct mthca_icm *icm, int coherent)  in mthca_free_icm()  argument
92 if (!icm) in mthca_free_icm()
95 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) { in mthca_free_icm()
104 kfree(icm); in mthca_free_icm()
140 struct mthca_icm *icm; in mthca_alloc_icm() local
148 icm = kmalloc(sizeof *icm, gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN)); in mthca_alloc_icm()
149 if (!icm) in mthca_alloc_icm()
150 return icm; in mthca_alloc_icm()
152 icm->refcount = 0; in mthca_alloc_icm()
153 INIT_LIST_HEAD(&icm->chunk_list); in mthca_alloc_icm()
167 list_add_tail(&chunk->list, &icm->chunk_list); in mthca_alloc_icm()
215 return icm; in mthca_alloc_icm()
218 mthca_free_icm(dev, icm, coherent); in mthca_alloc_icm()
229 if (table->icm[i]) { in mthca_table_get()
230 ++table->icm[i]->refcount; in mthca_table_get()
234 table->icm[i] = mthca_alloc_icm(dev, MTHCA_TABLE_CHUNK_SIZE >> PAGE_SHIFT, in mthca_table_get()
237 if (!table->icm[i]) { in mthca_table_get()
242 if (mthca_MAP_ICM(dev, table->icm[i], in mthca_table_get()
244 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_table_get()
245 table->icm[i] = NULL; in mthca_table_get()
250 ++table->icm[i]->refcount; in mthca_table_get()
268 if (--table->icm[i]->refcount == 0) { in mthca_table_put()
271 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_table_put()
272 table->icm[i] = NULL; in mthca_table_put()
282 struct mthca_icm *icm; in mthca_table_find() local
291 icm = table->icm[idx / MTHCA_TABLE_CHUNK_SIZE]; in mthca_table_find()
294 if (!icm) in mthca_table_find()
297 list_for_each_entry(chunk, &icm->chunk_list, list) { in mthca_table_find()
370 table = kmalloc(struct_size(table, icm, num_icm), GFP_KERNEL); in mthca_alloc_icm_table()
383 table->icm[i] = NULL; in mthca_alloc_icm_table()
390 table->icm[i] = mthca_alloc_icm(dev, chunk_size >> PAGE_SHIFT, in mthca_alloc_icm_table()
393 if (!table->icm[i]) in mthca_alloc_icm_table()
395 if (mthca_MAP_ICM(dev, table->icm[i], in mthca_alloc_icm_table()
397 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_alloc_icm_table()
398 table->icm[i] = NULL; in mthca_alloc_icm_table()
406 ++table->icm[i]->refcount; in mthca_alloc_icm_table()
413 if (table->icm[i]) { in mthca_alloc_icm_table()
416 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_alloc_icm_table()
429 if (table->icm[i]) { in mthca_free_icm_table()
433 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_free_icm_table()