Lines Matching refs:fmr

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