Lines Matching refs:fmr

125 	struct ib_pool_fmr *fmr;
132 hlist_for_each_entry(fmr, bucket, cache_node)
133 if (io_virtual_address == fmr->io_virtual_address &&
134 page_list_len == fmr->page_list_len &&
135 !memcmp(page_list, fmr->page_list,
137 return fmr;
145 struct ib_pool_fmr *fmr;
151 list_for_each_entry(fmr, &pool->dirty_list, list) {
152 hlist_del_init(&fmr->cache_node);
153 fmr->remap_count = 0;
154 list_add_tail(&fmr->fmr->list, &fmr_list);
157 if (fmr->ref_count !=0) {
159 fmr, fmr->ref_count);
285 struct ib_pool_fmr *fmr;
291 int bytes_per_fmr = sizeof *fmr;
297 fmr = kmalloc(bytes_per_fmr, GFP_KERNEL);
298 if (!fmr)
301 fmr->pool = pool;
302 fmr->remap_count = 0;
303 fmr->ref_count = 0;
304 INIT_HLIST_NODE(&fmr->cache_node);
306 fmr->fmr = ib_alloc_fmr(pd, params->access, &fmr_attr);
307 if (IS_ERR(fmr->fmr)) {
310 kfree(fmr);
314 list_add_tail(&fmr->list, &pool->free_list);
342 struct ib_pool_fmr *fmr;
351 list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
352 if (fmr->remap_count) {
354 list_add_tail(&fmr->fmr->list, &fmr_list);
357 ib_dealloc_fmr(fmr->fmr);
358 list_del(&fmr->list);
359 kfree(fmr);
381 struct ib_pool_fmr *fmr, *next;
390 list_for_each_entry_safe(fmr, next, &pool->free_list, list) {
391 if (fmr->remap_count > 0)
392 list_move(&fmr->list, &pool->dirty_list);
422 struct ib_pool_fmr *fmr;
430 fmr = ib_fmr_cache_lookup(pool,
434 if (fmr) {
436 ++fmr->ref_count;
437 if (fmr->ref_count == 1) {
438 list_del(&fmr->list);
443 return fmr;
451 fmr = list_entry(pool->free_list.next, struct ib_pool_fmr, list);
452 list_del(&fmr->list);
453 hlist_del_init(&fmr->cache_node);
456 result = ib_map_phys_fmr(fmr->fmr, page_list, list_len,
461 list_add(&fmr->list, &pool->free_list);
469 ++fmr->remap_count;
470 fmr->ref_count = 1;
473 fmr->io_virtual_address = io_virtual_address;
474 fmr->page_list_len = list_len;
475 memcpy(fmr->page_list, page_list, list_len * sizeof(*page_list));
478 hlist_add_head(&fmr->cache_node,
479 pool->cache_bucket + ib_fmr_hash(fmr->page_list[0]));
483 return fmr;
489 * @fmr:FMR to unmap
494 int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr)
499 pool = fmr->pool;
503 --fmr->ref_count;
504 if (!fmr->ref_count) {
505 if (fmr->remap_count < pool->max_remaps) {
506 list_add_tail(&fmr->list, &pool->free_list);
508 list_add_tail(&fmr->list, &pool->dirty_list);
517 if (fmr->ref_count < 0)
519 fmr, fmr->ref_count);