aboutsummaryrefslogtreecommitdiffstats
path: root/net/9p/trans_rdma.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/9p/trans_rdma.c')
-rw-r--r--net/9p/trans_rdma.c26
1 files changed, 2 insertions, 24 deletions
diff --git a/net/9p/trans_rdma.c b/net/9p/trans_rdma.c
index 37a78d20c0f6..ba1210253f5e 100644
--- a/net/9p/trans_rdma.c
+++ b/net/9p/trans_rdma.c
@@ -94,8 +94,6 @@ struct p9_trans_rdma {
94 struct ib_pd *pd; 94 struct ib_pd *pd;
95 struct ib_qp *qp; 95 struct ib_qp *qp;
96 struct ib_cq *cq; 96 struct ib_cq *cq;
97 struct ib_mr *dma_mr;
98 u32 lkey;
99 long timeout; 97 long timeout;
100 int sq_depth; 98 int sq_depth;
101 struct semaphore sq_sem; 99 struct semaphore sq_sem;
@@ -382,9 +380,6 @@ static void rdma_destroy_trans(struct p9_trans_rdma *rdma)
382 if (!rdma) 380 if (!rdma)
383 return; 381 return;
384 382
385 if (rdma->dma_mr && !IS_ERR(rdma->dma_mr))
386 ib_dereg_mr(rdma->dma_mr);
387
388 if (rdma->qp && !IS_ERR(rdma->qp)) 383 if (rdma->qp && !IS_ERR(rdma->qp))
389 ib_destroy_qp(rdma->qp); 384 ib_destroy_qp(rdma->qp);
390 385
@@ -415,7 +410,7 @@ post_recv(struct p9_client *client, struct p9_rdma_context *c)
415 410
416 sge.addr = c->busa; 411 sge.addr = c->busa;
417 sge.length = client->msize; 412 sge.length = client->msize;
418 sge.lkey = rdma->lkey; 413 sge.lkey = rdma->pd->local_dma_lkey;
419 414
420 wr.next = NULL; 415 wr.next = NULL;
421 c->wc_op = IB_WC_RECV; 416 c->wc_op = IB_WC_RECV;
@@ -506,7 +501,7 @@ dont_need_post_recv:
506 501
507 sge.addr = c->busa; 502 sge.addr = c->busa;
508 sge.length = c->req->tc->size; 503 sge.length = c->req->tc->size;
509 sge.lkey = rdma->lkey; 504 sge.lkey = rdma->pd->local_dma_lkey;
510 505
511 wr.next = NULL; 506 wr.next = NULL;
512 c->wc_op = IB_WC_SEND; 507 c->wc_op = IB_WC_SEND;
@@ -647,7 +642,6 @@ rdma_create_trans(struct p9_client *client, const char *addr, char *args)
647 struct p9_trans_rdma *rdma; 642 struct p9_trans_rdma *rdma;
648 struct rdma_conn_param conn_param; 643 struct rdma_conn_param conn_param;
649 struct ib_qp_init_attr qp_attr; 644 struct ib_qp_init_attr qp_attr;
650 struct ib_device_attr devattr;
651 struct ib_cq_init_attr cq_attr = {}; 645 struct ib_cq_init_attr cq_attr = {};
652 646
653 /* Parse the transport specific mount options */ 647 /* Parse the transport specific mount options */
@@ -700,11 +694,6 @@ rdma_create_trans(struct p9_client *client, const char *addr, char *args)
700 if (err || (rdma->state != P9_RDMA_ROUTE_RESOLVED)) 694 if (err || (rdma->state != P9_RDMA_ROUTE_RESOLVED))
701 goto error; 695 goto error;
702 696
703 /* Query the device attributes */
704 err = ib_query_device(rdma->cm_id->device, &devattr);
705 if (err)
706 goto error;
707
708 /* Create the Completion Queue */ 697 /* Create the Completion Queue */
709 cq_attr.cqe = opts.sq_depth + opts.rq_depth + 1; 698 cq_attr.cqe = opts.sq_depth + opts.rq_depth + 1;
710 rdma->cq = ib_create_cq(rdma->cm_id->device, cq_comp_handler, 699 rdma->cq = ib_create_cq(rdma->cm_id->device, cq_comp_handler,
@@ -719,17 +708,6 @@ rdma_create_trans(struct p9_client *client, const char *addr, char *args)
719 if (IS_ERR(rdma->pd)) 708 if (IS_ERR(rdma->pd))
720 goto error; 709 goto error;
721 710
722 /* Cache the DMA lkey in the transport */
723 rdma->dma_mr = NULL;
724 if (devattr.device_cap_flags & IB_DEVICE_LOCAL_DMA_LKEY)
725 rdma->lkey = rdma->cm_id->device->local_dma_lkey;
726 else {
727 rdma->dma_mr = ib_get_dma_mr(rdma->pd, IB_ACCESS_LOCAL_WRITE);
728 if (IS_ERR(rdma->dma_mr))
729 goto error;
730 rdma->lkey = rdma->dma_mr->lkey;
731 }
732
733 /* Create the Queue Pair */ 711 /* Create the Queue Pair */
734 memset(&qp_attr, 0, sizeof qp_attr); 712 memset(&qp_attr, 0, sizeof qp_attr);
735 qp_attr.event_handler = qp_event_handler; 713 qp_attr.event_handler = qp_event_handler;