Lines Matching refs:icm

87 void mthca_free_icm(struct mthca_dev *dev, struct mthca_icm *icm, int coherent)  in mthca_free_icm()  argument
91 if (!icm) in mthca_free_icm()
94 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) { in mthca_free_icm()
103 kfree(icm); in mthca_free_icm()
139 struct mthca_icm *icm; in mthca_alloc_icm() local
147 icm = kmalloc(sizeof *icm, gfp_mask & ~(__GFP_HIGHMEM | __GFP_NOWARN)); in mthca_alloc_icm()
148 if (!icm) in mthca_alloc_icm()
149 return icm; in mthca_alloc_icm()
151 icm->refcount = 0; in mthca_alloc_icm()
152 INIT_LIST_HEAD(&icm->chunk_list); in mthca_alloc_icm()
166 list_add_tail(&chunk->list, &icm->chunk_list); in mthca_alloc_icm()
214 return icm; in mthca_alloc_icm()
217 mthca_free_icm(dev, icm, coherent); in mthca_alloc_icm()
228 if (table->icm[i]) { in mthca_table_get()
229 ++table->icm[i]->refcount; in mthca_table_get()
233 table->icm[i] = mthca_alloc_icm(dev, MTHCA_TABLE_CHUNK_SIZE >> PAGE_SHIFT, in mthca_table_get()
236 if (!table->icm[i]) { in mthca_table_get()
241 if (mthca_MAP_ICM(dev, table->icm[i], in mthca_table_get()
243 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_table_get()
244 table->icm[i] = NULL; in mthca_table_get()
249 ++table->icm[i]->refcount; in mthca_table_get()
267 if (--table->icm[i]->refcount == 0) { in mthca_table_put()
270 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_table_put()
271 table->icm[i] = NULL; in mthca_table_put()
281 struct mthca_icm *icm; in mthca_table_find() local
290 icm = table->icm[idx / MTHCA_TABLE_CHUNK_SIZE]; in mthca_table_find()
293 if (!icm) in mthca_table_find()
296 list_for_each_entry(chunk, &icm->chunk_list, list) { in mthca_table_find()
369 table = kmalloc(sizeof *table + num_icm * sizeof *table->icm, GFP_KERNEL); in mthca_alloc_icm_table()
382 table->icm[i] = NULL; in mthca_alloc_icm_table()
389 table->icm[i] = mthca_alloc_icm(dev, chunk_size >> PAGE_SHIFT, in mthca_alloc_icm_table()
392 if (!table->icm[i]) in mthca_alloc_icm_table()
394 if (mthca_MAP_ICM(dev, table->icm[i], in mthca_alloc_icm_table()
396 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_alloc_icm_table()
397 table->icm[i] = NULL; in mthca_alloc_icm_table()
405 ++table->icm[i]->refcount; in mthca_alloc_icm_table()
412 if (table->icm[i]) { in mthca_alloc_icm_table()
415 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_alloc_icm_table()
428 if (table->icm[i]) { in mthca_free_icm_table()
432 mthca_free_icm(dev, table->icm[i], table->coherent); in mthca_free_icm_table()