diff options
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 12 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 4 |
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 | ||
| 542 | timeout: | 543 | timeout: |
| 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; |
