Message ID | 20191004204035.26542.41684.stgit@awfm-01.aw.intel.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 9ed5bd7d22241ad232fd3a5be404e83eb6cadc04 |
Headers | show |
Series | Updates for 5.4 rc cycle | expand |
On Fri, 2019-10-04 at 16:40 -0400, Dennis Dalessandro wrote: > From: Kaike Wan <kaike.wan@intel.com> > > A TID RDMA READ request could be retried under one of the following > conditions: > - The RC retry timer expires; > - A later TID RDMA READ RESP packet is received before the next > expected one. > For the latter, under normal conditions, the PSN in IB space is used > for comparison. More specifically, the IB PSN in the incoming TID RDMA > READ RESP packet is compared with the last IB PSN of a given TID RDMA > READ request to determine if the request should be retried. This is > similar to the retry logic for noraml RDMA READ request. > > However, if a TID RDMA READ RESP packet is lost due to congestion, > header suppresion will be disabled and each incoming packet will raise > an interrupt until the hardware flow is reloaded. Under this > condition, > each packet KDETH PSN will be checked by software against r_next_psn > and a retry will be requested if the packet KDETH PSN is later than > r_next_psn. Since each TID RDMA READ segment could have up to 64 > packets and each TID RDMA READ request could have many segments, we > could make far more retries under such conditions, and thus leading to > RETRY_EXC_ERR status. > > This patch fixes the issue by removing the retry when the incoming > packet KDETH PSN is later than r_next_psn. Instead, it resorts to > RC timer and normal IB PSN comparison for any request retry. > > Fixes: 9905bf06e890 ("IB/hfi1: Add functions to receive TID RDMA READ > response") > Cc: <stable@vger.kernel.org> > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> > Signed-off-by: Kaike Wan <kaike.wan@intel.com> > Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Thanks, applied to for-rc.
diff --git a/drivers/infiniband/hw/hfi1/tid_rdma.c b/drivers/infiniband/hw/hfi1/tid_rdma.c index b4dcc4d..f21fca3 100644 --- a/drivers/infiniband/hw/hfi1/tid_rdma.c +++ b/drivers/infiniband/hw/hfi1/tid_rdma.c @@ -2736,11 +2736,6 @@ static bool handle_read_kdeth_eflags(struct hfi1_ctxtdata *rcd, diff = cmp_psn(psn, flow->flow_state.r_next_psn); if (diff > 0) { - if (!(qp->r_flags & RVT_R_RDMAR_SEQ)) - restart_tid_rdma_read_req(rcd, - qp, - wqe); - /* Drop the packet.*/ goto s_unlock; } else if (diff < 0) {