Lines Matching refs:fmr

120 	struct ib_pool_fmr *fmr;  in ib_fmr_cache_lookup()  local
127 hlist_for_each_entry(fmr, bucket, cache_node) in ib_fmr_cache_lookup()
128 if (io_virtual_address == fmr->io_virtual_address && in ib_fmr_cache_lookup()
129 page_list_len == fmr->page_list_len && in ib_fmr_cache_lookup()
130 !memcmp(page_list, fmr->page_list, in ib_fmr_cache_lookup()
132 return fmr; in ib_fmr_cache_lookup()
140 struct ib_pool_fmr *fmr; in ib_fmr_batch_release() local
146 list_for_each_entry(fmr, &pool->dirty_list, list) { in ib_fmr_batch_release()
147 hlist_del_init(&fmr->cache_node); in ib_fmr_batch_release()
148 fmr->remap_count = 0; in ib_fmr_batch_release()
149 list_add_tail(&fmr->fmr->list, &fmr_list); in ib_fmr_batch_release()
152 if (fmr->ref_count !=0) { in ib_fmr_batch_release()
154 fmr, fmr->ref_count); in ib_fmr_batch_release()
300 struct ib_pool_fmr *fmr; in ib_create_fmr_pool() local
306 int bytes_per_fmr = sizeof *fmr; in ib_create_fmr_pool()
312 fmr = kmalloc(bytes_per_fmr, GFP_KERNEL); in ib_create_fmr_pool()
313 if (!fmr) { in ib_create_fmr_pool()
319 fmr->pool = pool; in ib_create_fmr_pool()
320 fmr->remap_count = 0; in ib_create_fmr_pool()
321 fmr->ref_count = 0; in ib_create_fmr_pool()
322 INIT_HLIST_NODE(&fmr->cache_node); in ib_create_fmr_pool()
324 fmr->fmr = ib_alloc_fmr(pd, params->access, &fmr_attr); in ib_create_fmr_pool()
325 if (IS_ERR(fmr->fmr)) { in ib_create_fmr_pool()
328 kfree(fmr); in ib_create_fmr_pool()
332 list_add_tail(&fmr->list, &pool->free_list); in ib_create_fmr_pool()
360 struct ib_pool_fmr *fmr; in ib_destroy_fmr_pool() local
369 list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) { in ib_destroy_fmr_pool()
370 if (fmr->remap_count) { in ib_destroy_fmr_pool()
372 list_add_tail(&fmr->fmr->list, &fmr_list); in ib_destroy_fmr_pool()
375 ib_dealloc_fmr(fmr->fmr); in ib_destroy_fmr_pool()
376 list_del(&fmr->list); in ib_destroy_fmr_pool()
377 kfree(fmr); in ib_destroy_fmr_pool()
399 struct ib_pool_fmr *fmr, *next; in ib_flush_fmr_pool() local
408 list_for_each_entry_safe(fmr, next, &pool->free_list, list) { in ib_flush_fmr_pool()
409 if (fmr->remap_count > 0) in ib_flush_fmr_pool()
410 list_move(&fmr->list, &pool->dirty_list); in ib_flush_fmr_pool()
440 struct ib_pool_fmr *fmr; in ib_fmr_pool_map_phys() local
448 fmr = ib_fmr_cache_lookup(pool, in ib_fmr_pool_map_phys()
452 if (fmr) { in ib_fmr_pool_map_phys()
454 ++fmr->ref_count; in ib_fmr_pool_map_phys()
455 if (fmr->ref_count == 1) { in ib_fmr_pool_map_phys()
456 list_del(&fmr->list); in ib_fmr_pool_map_phys()
461 return fmr; in ib_fmr_pool_map_phys()
469 fmr = list_entry(pool->free_list.next, struct ib_pool_fmr, list); in ib_fmr_pool_map_phys()
470 list_del(&fmr->list); in ib_fmr_pool_map_phys()
471 hlist_del_init(&fmr->cache_node); in ib_fmr_pool_map_phys()
474 result = ib_map_phys_fmr(fmr->fmr, page_list, list_len, in ib_fmr_pool_map_phys()
479 list_add(&fmr->list, &pool->free_list); in ib_fmr_pool_map_phys()
487 ++fmr->remap_count; in ib_fmr_pool_map_phys()
488 fmr->ref_count = 1; in ib_fmr_pool_map_phys()
491 fmr->io_virtual_address = io_virtual_address; in ib_fmr_pool_map_phys()
492 fmr->page_list_len = list_len; in ib_fmr_pool_map_phys()
493 memcpy(fmr->page_list, page_list, list_len * sizeof(*page_list)); in ib_fmr_pool_map_phys()
496 hlist_add_head(&fmr->cache_node, in ib_fmr_pool_map_phys()
497 pool->cache_bucket + ib_fmr_hash(fmr->page_list[0])); in ib_fmr_pool_map_phys()
501 return fmr; in ib_fmr_pool_map_phys()
512 int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr) in ib_fmr_pool_unmap() argument
517 pool = fmr->pool; in ib_fmr_pool_unmap()
521 --fmr->ref_count; in ib_fmr_pool_unmap()
522 if (!fmr->ref_count) { in ib_fmr_pool_unmap()
523 if (fmr->remap_count < pool->max_remaps) { in ib_fmr_pool_unmap()
524 list_add_tail(&fmr->list, &pool->free_list); in ib_fmr_pool_unmap()
526 list_add_tail(&fmr->list, &pool->dirty_list); in ib_fmr_pool_unmap()
535 if (fmr->ref_count < 0) in ib_fmr_pool_unmap()
537 fmr, fmr->ref_count); in ib_fmr_pool_unmap()