IB/mad: Remove ib_get_dma_mr calls
authorJason Gunthorpe <jgunthorpe@obsidianresearch.com>
Thu, 30 Jul 2015 23:22:16 +0000 (17:22 -0600)
committerDoug Ledford <dledford@redhat.com>
Sun, 30 Aug 2015 22:12:33 +0000 (18:12 -0400)
The pd now has a local_dma_lkey member which completely replaces
ib_get_dma_mr, use it instead.

Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/mad.c
drivers/infiniband/core/mad_priv.h
include/rdma/ib_mad.h

index 66b4b3eb8f67b21078855fc9b8bfb25bc5a17371..4b5c72311debbe59ae0975ec6d0fa722db13234e 100644 (file)
@@ -338,13 +338,6 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
                goto error1;
        }
 
-       mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp->pd,
-                                                IB_ACCESS_LOCAL_WRITE);
-       if (IS_ERR(mad_agent_priv->agent.mr)) {
-               ret = ERR_PTR(-ENOMEM);
-               goto error2;
-       }
-
        if (mad_reg_req) {
                reg_req = kmemdup(mad_reg_req, sizeof *reg_req, GFP_KERNEL);
                if (!reg_req) {
@@ -429,8 +422,6 @@ error4:
        spin_unlock_irqrestore(&port_priv->reg_lock, flags);
        kfree(reg_req);
 error3:
-       ib_dereg_mr(mad_agent_priv->agent.mr);
-error2:
        kfree(mad_agent_priv);
 error1:
        return ret;
@@ -590,7 +581,6 @@ static void unregister_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
        wait_for_completion(&mad_agent_priv->comp);
 
        kfree(mad_agent_priv->reg_req);
-       ib_dereg_mr(mad_agent_priv->agent.mr);
        kfree(mad_agent_priv);
 }
 
@@ -1038,7 +1028,7 @@ struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent,
 
        mad_send_wr->mad_agent_priv = mad_agent_priv;
        mad_send_wr->sg_list[0].length = hdr_len;
-       mad_send_wr->sg_list[0].lkey = mad_agent->mr->lkey;
+       mad_send_wr->sg_list[0].lkey = mad_agent->qp->pd->local_dma_lkey;
 
        /* OPA MADs don't have to be the full 2048 bytes */
        if (opa && base_version == OPA_MGMT_BASE_VERSION &&
@@ -1047,7 +1037,7 @@ struct ib_mad_send_buf * ib_create_send_mad(struct ib_mad_agent *mad_agent,
        else
                mad_send_wr->sg_list[1].length = mad_size - hdr_len;
 
-       mad_send_wr->sg_list[1].lkey = mad_agent->mr->lkey;
+       mad_send_wr->sg_list[1].lkey = mad_agent->qp->pd->local_dma_lkey;
 
        mad_send_wr->send_wr.wr_id = (unsigned long) mad_send_wr;
        mad_send_wr->send_wr.sg_list = mad_send_wr->sg_list;
@@ -2885,7 +2875,7 @@ static int ib_mad_post_receive_mads(struct ib_mad_qp_info *qp_info,
        struct ib_mad_queue *recv_queue = &qp_info->recv_queue;
 
        /* Initialize common scatter list fields */
-       sg_list.lkey = (*qp_info->port_priv->mr).lkey;
+       sg_list.lkey = qp_info->port_priv->pd->local_dma_lkey;
 
        /* Initialize common receive WR fields */
        recv_wr.next = NULL;
@@ -3201,13 +3191,6 @@ static int ib_mad_port_open(struct ib_device *device,
                goto error4;
        }
 
-       port_priv->mr = ib_get_dma_mr(port_priv->pd, IB_ACCESS_LOCAL_WRITE);
-       if (IS_ERR(port_priv->mr)) {
-               dev_err(&device->dev, "Couldn't get ib_mad DMA MR\n");
-               ret = PTR_ERR(port_priv->mr);
-               goto error5;
-       }
-
        if (has_smi) {
                ret = create_mad_qp(&port_priv->qp_info[0], IB_QPT_SMI);
                if (ret)
@@ -3248,8 +3231,6 @@ error8:
 error7:
        destroy_mad_qp(&port_priv->qp_info[0]);
 error6:
-       ib_dereg_mr(port_priv->mr);
-error5:
        ib_dealloc_pd(port_priv->pd);
 error4:
        ib_destroy_cq(port_priv->cq);
@@ -3284,7 +3265,6 @@ static int ib_mad_port_close(struct ib_device *device, int port_num)
        destroy_workqueue(port_priv->wq);
        destroy_mad_qp(&port_priv->qp_info[1]);
        destroy_mad_qp(&port_priv->qp_info[0]);
-       ib_dereg_mr(port_priv->mr);
        ib_dealloc_pd(port_priv->pd);
        ib_destroy_cq(port_priv->cq);
        cleanup_recv_queue(&port_priv->qp_info[1]);
index 5be89f98928f203ff43208a5fed57f3890b6b82e..4a4f7aad09783de0cfd3fb92031b03890925b760 100644 (file)
@@ -199,7 +199,6 @@ struct ib_mad_port_private {
        int port_num;
        struct ib_cq *cq;
        struct ib_pd *pd;
-       struct ib_mr *mr;
 
        spinlock_t reg_lock;
        struct ib_mad_mgmt_version_table version[MAX_MGMT_VERSION];
index d5ac0229f5e71c8b5f6d9da330f568a6597b3a05..c206205bbf986d694afb15e1311877337a377b01 100644 (file)
@@ -526,7 +526,6 @@ enum {
 struct ib_mad_agent {
        struct ib_device        *device;
        struct ib_qp            *qp;
-       struct ib_mr            *mr;
        ib_mad_recv_handler     recv_handler;
        ib_mad_send_handler     send_handler;
        ib_mad_snoop_handler    snoop_handler;