diff options
| author | Slava Shwartsman <slavash@FreeBSD.org> | 2018-12-05 13:27:17 +0000 |
|---|---|---|
| committer | Slava Shwartsman <slavash@FreeBSD.org> | 2018-12-05 13:27:17 +0000 |
| commit | 186058782aaa22ca79b16fad29d4897e6b4c8247 (patch) | |
| tree | c8b29d9cf84753536d08211bd8ad4c1ede8ef8a1 /sys/ofed/drivers | |
| parent | a061f0eb65897831dfa2088fdd60ac681129a832 (diff) | |
Notes
Diffstat (limited to 'sys/ofed/drivers')
| -rw-r--r-- | sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 7689cb0c3fe9..f3b13d8c1c51 100644 --- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c @@ -710,6 +710,30 @@ static int recvs_pending(struct ipoib_dev_priv *priv) return pending; } +static void check_qp_movement_and_print(struct ipoib_dev_priv *priv, + struct ib_qp *qp, + enum ib_qp_state new_state) +{ + struct ib_qp_attr qp_attr; + struct ib_qp_init_attr query_init_attr; + int ret; + + ret = ib_query_qp(qp, &qp_attr, IB_QP_STATE, &query_init_attr); + if (ret) { + ipoib_warn(priv, "%s: Failed to query QP (%d)\n", __func__, ret); + return; + } + + /* print according to the new-state and the previous state */ + if (new_state == IB_QPS_ERR && qp_attr.qp_state == IB_QPS_RESET) { + ipoib_dbg(priv, "Failed to modify QP %d->%d, acceptable\n", + qp_attr.qp_state, new_state); + } else { + ipoib_warn(priv, "Failed to modify QP %d->%d\n", + qp_attr.qp_state, new_state); + } +} + void ipoib_drain_cq(struct ipoib_dev_priv *priv) { int i, n; @@ -761,7 +785,7 @@ int ipoib_ib_dev_stop(struct ipoib_dev_priv *priv, int flush) */ qp_attr.qp_state = IB_QPS_ERR; if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) - ipoib_warn(priv, "Failed to modify QP to ERROR state\n"); + check_qp_movement_and_print(priv, priv->qp, IB_QPS_ERR); /* Wait for all sends and receives to complete */ begin = jiffies; |
