Lines Matching refs:ibmr
200 struct rds_ib_mr *ibmr = NULL; in rds_ib_reuse_mr() local
208 ibmr = llist_entry(ret, struct rds_ib_mr, llnode); in rds_ib_reuse_mr()
215 return ibmr; in rds_ib_reuse_mr()
220 struct rds_ib_mr *ibmr = trans_private; in rds_ib_sync_mr() local
221 struct rds_ib_device *rds_ibdev = ibmr->device; in rds_ib_sync_mr()
223 if (ibmr->odp) in rds_ib_sync_mr()
228 ib_dma_sync_sg_for_cpu(rds_ibdev->dev, ibmr->sg, in rds_ib_sync_mr()
229 ibmr->sg_dma_len, DMA_BIDIRECTIONAL); in rds_ib_sync_mr()
232 ib_dma_sync_sg_for_device(rds_ibdev->dev, ibmr->sg, in rds_ib_sync_mr()
233 ibmr->sg_dma_len, DMA_BIDIRECTIONAL); in rds_ib_sync_mr()
238 void __rds_ib_teardown_mr(struct rds_ib_mr *ibmr) in __rds_ib_teardown_mr() argument
240 struct rds_ib_device *rds_ibdev = ibmr->device; in __rds_ib_teardown_mr()
242 if (ibmr->sg_dma_len) { in __rds_ib_teardown_mr()
244 ibmr->sg, ibmr->sg_len, in __rds_ib_teardown_mr()
246 ibmr->sg_dma_len = 0; in __rds_ib_teardown_mr()
250 if (ibmr->sg_len) { in __rds_ib_teardown_mr()
253 for (i = 0; i < ibmr->sg_len; ++i) { in __rds_ib_teardown_mr()
254 struct page *page = sg_page(&ibmr->sg[i]); in __rds_ib_teardown_mr()
262 kfree(ibmr->sg); in __rds_ib_teardown_mr()
264 ibmr->sg = NULL; in __rds_ib_teardown_mr()
265 ibmr->sg_len = 0; in __rds_ib_teardown_mr()
269 void rds_ib_teardown_mr(struct rds_ib_mr *ibmr) in rds_ib_teardown_mr() argument
271 unsigned int pinned = ibmr->sg_len; in rds_ib_teardown_mr()
273 __rds_ib_teardown_mr(ibmr); in rds_ib_teardown_mr()
275 struct rds_ib_mr_pool *pool = ibmr->pool; in rds_ib_teardown_mr()
298 struct rds_ib_mr *ibmr; in llist_append_to_list() local
306 ibmr = llist_entry(node, struct rds_ib_mr, llnode); in llist_append_to_list()
307 list_add_tail(&ibmr->unmap_list, list); in llist_append_to_list()
323 struct rds_ib_mr *ibmr; in list_to_llist_nodes() local
327 list_for_each_entry(ibmr, list, unmap_list) { in list_to_llist_nodes()
328 cur = &ibmr->llnode; in list_to_llist_nodes()
345 struct rds_ib_mr *ibmr; in rds_ib_flush_mr_pool() local
360 ibmr = rds_ib_reuse_mr(pool); in rds_ib_flush_mr_pool()
361 if (ibmr) { in rds_ib_flush_mr_pool()
362 *ibmr_ret = ibmr; in rds_ib_flush_mr_pool()
372 ibmr = rds_ib_reuse_mr(pool); in rds_ib_flush_mr_pool()
373 if (ibmr) { in rds_ib_flush_mr_pool()
374 *ibmr_ret = ibmr; in rds_ib_flush_mr_pool()
384 ibmr = rds_ib_reuse_mr(pool); in rds_ib_flush_mr_pool()
385 if (ibmr) { in rds_ib_flush_mr_pool()
386 *ibmr_ret = ibmr; in rds_ib_flush_mr_pool()
442 struct rds_ib_mr *ibmr = NULL; in rds_ib_try_reuse_ibmr() local
446 ibmr = rds_ib_reuse_mr(pool); in rds_ib_try_reuse_ibmr()
447 if (ibmr) in rds_ib_try_reuse_ibmr()
448 return ibmr; in rds_ib_try_reuse_ibmr()
469 rds_ib_flush_mr_pool(pool, 0, &ibmr); in rds_ib_try_reuse_ibmr()
470 if (ibmr) in rds_ib_try_reuse_ibmr()
471 return ibmr; in rds_ib_try_reuse_ibmr()
486 struct rds_ib_mr *ibmr = trans_private; in rds_ib_free_mr() local
487 struct rds_ib_mr_pool *pool = ibmr->pool; in rds_ib_free_mr()
488 struct rds_ib_device *rds_ibdev = ibmr->device; in rds_ib_free_mr()
490 rdsdebug("RDS/IB: free_mr nents %u\n", ibmr->sg_len); in rds_ib_free_mr()
492 if (ibmr->odp) { in rds_ib_free_mr()
497 INIT_DELAYED_WORK(&ibmr->work, rds_ib_odp_mr_worker); in rds_ib_free_mr()
498 queue_delayed_work(rds_ib_mr_wq, &ibmr->work, 0); in rds_ib_free_mr()
503 rds_ib_free_frmr_list(ibmr); in rds_ib_free_mr()
505 atomic_add(ibmr->sg_len, &pool->free_pinned); in rds_ib_free_mr()
545 struct rds_ib_mr *ibmr = trans_private; in rds_ib_get_lkey() local
547 return ibmr->u.mr->lkey; in rds_ib_get_lkey()
556 struct rds_ib_mr *ibmr = NULL; in rds_ib_get_mr() local
592 ibmr = kzalloc(sizeof(*ibmr), GFP_KERNEL); in rds_ib_get_mr()
593 if (!ibmr) { in rds_ib_get_mr()
598 ibmr->u.mr = ib_mr; in rds_ib_get_mr()
599 ibmr->odp = 1; in rds_ib_get_mr()
608 return ibmr; in rds_ib_get_mr()
619 ibmr = rds_ib_reg_frmr(rds_ibdev, ic, sg, nents, key_ret); in rds_ib_get_mr()
620 if (IS_ERR(ibmr)) { in rds_ib_get_mr()
621 ret = PTR_ERR(ibmr); in rds_ib_get_mr()
624 return ibmr; in rds_ib_get_mr()
696 struct rds_ib_mr *ibmr; in rds_ib_odp_mr_worker() local
698 ibmr = container_of(work, struct rds_ib_mr, work.work); in rds_ib_odp_mr_worker()
699 ib_dereg_mr(ibmr->u.mr); in rds_ib_odp_mr_worker()
700 kfree(ibmr); in rds_ib_odp_mr_worker()