summaryrefslogtreecommitdiff
path: root/drivers/infiniband/hw
diff options
context:
space:
mode:
authorVipul Pandya <vipul@chelsio.com>2013-01-07 13:11:52 +0000
committerRoland Dreier <roland@purestorage.com>2013-02-14 15:51:55 -0800
commit1557967bf921e787f0c9236c2899603d85f44d31 (patch)
tree75df934f20c995ddc766112bd353383a0113638e /drivers/infiniband/hw
parent91e9c07195032bbde47489b8b423053cff5f413d (diff)
RDMA/cxgb4: Display streaming mode error only if detected in RTS
With later firmware, the chances of getting streaming mode data after we exit RTS is likely, so we don't need to warn for it. The only real case where we don't expect it is when the QP is in RTS. Move QP to ERROR when streaming mode data received. Signed-off-by: Vipul Pandya <vipul@chelsio.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index 3dce47a63709..31d1fac605d3 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -1403,21 +1403,23 @@ static int rx_data(struct c4iw_dev *dev, struct sk_buff *skb)
ep->rcv_seq += dlen;
process_mpa_request(ep, skb);
break;
- default:
- pr_err("%s Unexpected streaming data." \
- " ep %p state %d tid %u status %d\n",
- __func__, ep, state_read(&ep->com), ep->hwtid, status);
-
- if (ep->com.qp) {
- struct c4iw_qp_attributes attrs;
-
- attrs.next_state = C4IW_QP_STATE_ERROR;
- c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
- C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
- }
+ case FPDU_MODE: {
+ struct c4iw_qp_attributes attrs;
+ BUG_ON(!ep->com.qp);
+ if (ep->com.qp->attr.state == C4IW_QP_STATE_RTS)
+ pr_err("%s Unexpected streaming data." \
+ " ep %p state %d tid %u status %d\n",
+ __func__, ep, state_read(&ep->com),
+ ep->hwtid, status);
+ attrs.next_state = C4IW_QP_STATE_ERROR;
+ c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
+ C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
c4iw_ep_disconnect(ep, 1, GFP_KERNEL);
break;
}
+ default:
+ break;
+ }
return 0;
}