svn commit: r341890 - stable/12/sys/ofed/drivers/infiniband/ulp/ipoib
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Dec 12 11:33:51 UTC 2018
Author: hselasky
Date: Wed Dec 12 11:33:50 2018
New Revision: 341890
URL: https://svnweb.freebsd.org/changeset/base/341890
Log:
MFC r341538:
ipoib: Notify on modify QP failure only when relevant
Modify QP can fail and it can be acceptable, like when moving from RST to
ERR state, all the rest are not acceptable and a message to the log
should be printed.
The current code prints on all failures and many messages like:
"Failed to modify QP to ERROR state" appear, even when supported by the
state machine of the QP object.
Linux commit:
5dc78ad1904db597bdb4427f3ead437aae86f54c
Sponsored by: Mellanox Technologies
Modified:
stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
==============================================================================
--- stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c Wed Dec 12 11:33:14 2018 (r341889)
+++ stable/12/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c Wed Dec 12 11:33:50 2018 (r341890)
@@ -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
*/
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;
More information about the svn-src-all
mailing list