RDMA/cxgb3: Program hardware IRD with correct value
PATCH 1/1 RDMA/cxgb3: Program hardware IRD with correct value
Because of a typo in iwch_accept_cr(), the cxgb3 connection handling code programs the hardware IRD (incoming RDMA read queue depth) with the value that is passed in for the ORD (outgoing RDMA read queue depth). In particular this means that if an application passes in IRD
Quoted 1 line
0 and ORD = 0 (which is a completely sane and valid thing to do for
an app that expects only incoming RDMA read requests), then the hardware will end up programmed with IRD = 0 and the app will fail in a mysterious way.
Fix this by using "ep->ird" instead of "ep->ord" in the intended place.
---
Linus, please add this for 2.6.25 if possible -- it's a trivial, "obviously correct" fix that is very low risk and fixes real apps.
Thanks,
Roland
drivers/infiniband/hw/cxgb3/iwch_cm.c +1 -1
@@ -1745,7 +1745,7 @@ int iwch_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)/* bind QP to EP and move to RTS */ attrs.mpa_attr = ep->mpa_attr; - attrs.max_ird = ep->ord; + attrs.max_ird = ep->ird; attrs.max_ord = ep->ord; attrs.llp_stream_handle = ep; attrs.next_state =IWCH_QP_STATE_RTS ;