These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / infiniband / ulp / ipoib / ipoib_verbs.c
index 2d13fd0..d48c5ba 100644 (file)
@@ -141,6 +141,7 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
                .sq_sig_type = IB_SIGNAL_ALL_WR,
                .qp_type     = IB_QPT_UD
        };
+       struct ib_cq_init_attr cq_attr = {};
 
        int ret, size;
        int i;
@@ -151,12 +152,6 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
                return -ENODEV;
        }
 
-       priv->mr = ib_get_dma_mr(priv->pd, IB_ACCESS_LOCAL_WRITE);
-       if (IS_ERR(priv->mr)) {
-               printk(KERN_WARNING "%s: ib_get_dma_mr failed\n", ca->name);
-               goto out_free_pd;
-       }
-
        /*
         * the various IPoIB tasks assume they will never race against
         * themselves, so always use a single thread workqueue
@@ -164,7 +159,7 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
        priv->wq = create_singlethread_workqueue("ipoib_wq");
        if (!priv->wq) {
                printk(KERN_WARNING "ipoib: failed to allocate device WQ\n");
-               goto out_free_mr;
+               goto out_free_pd;
        }
 
        size = ipoib_recvq_size + 1;
@@ -179,14 +174,17 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
                if (ret != -ENOSYS)
                        goto out_free_wq;
 
-       priv->recv_cq = ib_create_cq(priv->ca, ipoib_ib_completion, NULL, dev, size, 0);
+       cq_attr.cqe = size;
+       priv->recv_cq = ib_create_cq(priv->ca, ipoib_ib_completion, NULL,
+                                    dev, &cq_attr);
        if (IS_ERR(priv->recv_cq)) {
                printk(KERN_WARNING "%s: failed to create receive CQ\n", ca->name);
                goto out_cm_dev_cleanup;
        }
 
+       cq_attr.cqe = ipoib_sendq_size;
        priv->send_cq = ib_create_cq(priv->ca, ipoib_send_comp_handler, NULL,
-                                    dev, ipoib_sendq_size, 0);
+                                    dev, &cq_attr);
        if (IS_ERR(priv->send_cq)) {
                printk(KERN_WARNING "%s: failed to create send CQ\n", ca->name);
                goto out_free_recv_cq;
@@ -221,13 +219,13 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
        priv->dev->dev_addr[3] = (priv->qp->qp_num      ) & 0xff;
 
        for (i = 0; i < MAX_SKB_FRAGS + 1; ++i)
-               priv->tx_sge[i].lkey = priv->mr->lkey;
+               priv->tx_sge[i].lkey = priv->pd->local_dma_lkey;
 
-       priv->tx_wr.opcode      = IB_WR_SEND;
-       priv->tx_wr.sg_list     = priv->tx_sge;
-       priv->tx_wr.send_flags  = IB_SEND_SIGNALED;
+       priv->tx_wr.wr.opcode           = IB_WR_SEND;
+       priv->tx_wr.wr.sg_list          = priv->tx_sge;
+       priv->tx_wr.wr.send_flags       = IB_SEND_SIGNALED;
 
-       priv->rx_sge[0].lkey = priv->mr->lkey;
+       priv->rx_sge[0].lkey = priv->pd->local_dma_lkey;
 
        priv->rx_sge[0].length = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu);
        priv->rx_wr.num_sge = 1;
@@ -250,9 +248,6 @@ out_free_wq:
        destroy_workqueue(priv->wq);
        priv->wq = NULL;
 
-out_free_mr:
-       ib_dereg_mr(priv->mr);
-
 out_free_pd:
        ib_dealloc_pd(priv->pd);
 
@@ -285,12 +280,7 @@ void ipoib_transport_dev_cleanup(struct net_device *dev)
                priv->wq = NULL;
        }
 
-       if (ib_dereg_mr(priv->mr))
-               ipoib_warn(priv, "ib_dereg_mr failed\n");
-
-       if (ib_dealloc_pd(priv->pd))
-               ipoib_warn(priv, "ib_dealloc_pd failed\n");
-
+       ib_dealloc_pd(priv->pd);
 }
 
 void ipoib_event(struct ib_event_handler *handler,