Lines Matching refs:mr

54  * @mr: MR allocated by frwr_mr_init
57 void frwr_release_mr(struct rpcrdma_mr *mr)
61 rc = ib_dereg_mr(mr->frwr.fr_mr);
63 trace_xprtrdma_frwr_dereg(mr, rc);
64 kfree(mr->mr_sg);
65 kfree(mr);
68 static void frwr_mr_recycle(struct rpcrdma_mr *mr)
70 struct rpcrdma_xprt *r_xprt = mr->mr_xprt;
72 trace_xprtrdma_mr_recycle(mr);
74 if (mr->mr_dir != DMA_NONE) {
75 trace_xprtrdma_mr_unmap(mr);
77 mr->mr_sg, mr->mr_nents, mr->mr_dir);
78 mr->mr_dir = DMA_NONE;
82 list_del(&mr->mr_all);
86 frwr_release_mr(mr);
101 struct rpcrdma_mr *mr;
103 while ((mr = rpcrdma_mr_pop(&req->rl_registered)))
104 rpcrdma_mr_put(mr);
110 * @mr: generic MR to prepare for FRWR
115 int frwr_mr_init(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr *mr)
131 mr->mr_xprt = r_xprt;
132 mr->frwr.fr_mr = frmr;
133 mr->mr_dir = DMA_NONE;
134 INIT_LIST_HEAD(&mr->mr_list);
135 init_completion(&mr->frwr.fr_linv_done);
138 mr->mr_sg = sg;
143 trace_xprtrdma_frwr_alloc(mr, rc);
273 * @mr: MR to fill in
279 * On success, @mr is filled in.
284 struct rpcrdma_mr *mr)
296 sg_set_page(&mr->mr_sg[i],
301 sg_set_buf(&mr->mr_sg[i], seg->mr_offset,
312 mr->mr_dir = rpcrdma_data_dir(writing);
313 mr->mr_nents = i;
315 dma_nents = ib_dma_map_sg(ep->re_id->device, mr->mr_sg, mr->mr_nents,
316 mr->mr_dir);
320 ibmr = mr->frwr.fr_mr;
321 n = ib_map_mr_sg(ibmr, mr->mr_sg, dma_nents, NULL, PAGE_SIZE);
330 reg_wr = &mr->frwr.fr_regwr;
331 reg_wr->mr = ibmr;
337 mr->mr_handle = ibmr->rkey;
338 mr->mr_length = ibmr->length;
339 mr->mr_offset = ibmr->iova;
340 trace_xprtrdma_mr_map(mr);
345 mr->mr_dir = DMA_NONE;
346 trace_xprtrdma_frwr_sgerr(mr, i);
350 trace_xprtrdma_frwr_maperr(mr, n);
390 struct rpcrdma_mr *mr;
393 list_for_each_entry(mr, &req->rl_registered, mr_list) {
396 frwr = &mr->frwr;
412 * frwr_reminv - handle a remotely invalidated mr on the @mrs list
419 struct rpcrdma_mr *mr;
421 list_for_each_entry(mr, mrs, mr_list)
422 if (mr->mr_handle == rep->rr_inv_rkey) {
423 list_del_init(&mr->mr_list);
424 trace_xprtrdma_mr_reminv(mr);
425 rpcrdma_mr_put(mr);
430 static void __frwr_release_mr(struct ib_wc *wc, struct rpcrdma_mr *mr)
433 frwr_mr_recycle(mr);
435 rpcrdma_mr_put(mr);
449 struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
453 __frwr_release_mr(wc, mr);
470 struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
474 __frwr_release_mr(wc, mr);
496 struct rpcrdma_mr *mr;
506 while ((mr = rpcrdma_mr_pop(&req->rl_registered))) {
508 trace_xprtrdma_mr_localinv(mr);
511 frwr = &mr->frwr;
520 last->ex.invalidate_rkey = mr->mr_handle;
555 mr = container_of(frwr, struct rpcrdma_mr, frwr);
558 frwr_mr_recycle(mr);
573 struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
574 struct rpcrdma_rep *rep = mr->mr_req->rl_reply;
578 __frwr_release_mr(wc, mr);
602 struct rpcrdma_mr *mr;
610 while ((mr = rpcrdma_mr_pop(&req->rl_registered))) {
612 trace_xprtrdma_mr_localinv(mr);
615 frwr = &mr->frwr;
624 last->ex.invalidate_rkey = mr->mr_handle;
651 mr = container_of(frwr, struct rpcrdma_mr, frwr);
654 frwr_mr_recycle(mr);