aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ib.c12
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_verbs.c4
2 files changed, 7 insertions, 9 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 192fef884e21..0a6f578f18c8 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -486,15 +486,16 @@ int ipoib_ib_dev_stop(struct net_device *dev)
486{ 486{
487 struct ipoib_dev_priv *priv = netdev_priv(dev); 487 struct ipoib_dev_priv *priv = netdev_priv(dev);
488 struct ib_qp_attr qp_attr; 488 struct ib_qp_attr qp_attr;
489 int attr_mask;
490 unsigned long begin; 489 unsigned long begin;
491 struct ipoib_tx_buf *tx_req; 490 struct ipoib_tx_buf *tx_req;
492 int i; 491 int i;
493 492
494 /* Kill the existing QP and allocate a new one */ 493 /*
494 * Move our QP to the error state and then reinitialize in
495 * when all work requests have completed or have been flushed.
496 */
495 qp_attr.qp_state = IB_QPS_ERR; 497 qp_attr.qp_state = IB_QPS_ERR;
496 attr_mask = IB_QP_STATE; 498 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
497 if (ib_modify_qp(priv->qp, &qp_attr, attr_mask))
498 ipoib_warn(priv, "Failed to modify QP to ERROR state\n"); 499 ipoib_warn(priv, "Failed to modify QP to ERROR state\n");
499 500
500 /* Wait for all sends and receives to complete */ 501 /* Wait for all sends and receives to complete */
@@ -541,8 +542,7 @@ int ipoib_ib_dev_stop(struct net_device *dev)
541 542
542timeout: 543timeout:
543 qp_attr.qp_state = IB_QPS_RESET; 544 qp_attr.qp_state = IB_QPS_RESET;
544 attr_mask = IB_QP_STATE; 545 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
545 if (ib_modify_qp(priv->qp, &qp_attr, attr_mask))
546 ipoib_warn(priv, "Failed to modify QP to RESET state\n"); 546 ipoib_warn(priv, "Failed to modify QP to RESET state\n");
547 547
548 /* Wait for all AHs to be reaped */ 548 /* Wait for all AHs to be reaped */
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
index b5902a7ec240..e829e10400e3 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -41,7 +41,6 @@ int ipoib_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid)
41{ 41{
42 struct ipoib_dev_priv *priv = netdev_priv(dev); 42 struct ipoib_dev_priv *priv = netdev_priv(dev);
43 struct ib_qp_attr *qp_attr; 43 struct ib_qp_attr *qp_attr;
44 int attr_mask;
45 int ret; 44 int ret;
46 u16 pkey_index; 45 u16 pkey_index;
47 46
@@ -59,8 +58,7 @@ int ipoib_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid)
59 58
60 /* set correct QKey for QP */ 59 /* set correct QKey for QP */
61 qp_attr->qkey = priv->qkey; 60 qp_attr->qkey = priv->qkey;
62 attr_mask = IB_QP_QKEY; 61 ret = ib_modify_qp(priv->qp, qp_attr, IB_QP_QKEY);
63 ret = ib_modify_qp(priv->qp, qp_attr, attr_mask);
64 if (ret) { 62 if (ret) {
65 ipoib_warn(priv, "failed to modify QP, ret = %d\n", ret); 63 ipoib_warn(priv, "failed to modify QP, ret = %d\n", ret);
66 goto out; 64 goto out;