aboutsummaryrefslogtreecommitdiff
path: root/sys/ofed/drivers
diff options
context:
space:
mode:
authorSlava Shwartsman <slavash@FreeBSD.org>2018-12-05 13:27:17 +0000
committerSlava Shwartsman <slavash@FreeBSD.org>2018-12-05 13:27:17 +0000
commit186058782aaa22ca79b16fad29d4897e6b4c8247 (patch)
treec8b29d9cf84753536d08211bd8ad4c1ede8ef8a1 /sys/ofed/drivers
parenta061f0eb65897831dfa2088fdd60ac681129a832 (diff)
Notes
Diffstat (limited to 'sys/ofed/drivers')
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c26
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;