]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-4.14/ib-hfi1-unreserve-a-reserved-request-when-it-is-comp.patch
autosel patches for 4.14
[thirdparty/kernel/stable-queue.git] / queue-4.14 / ib-hfi1-unreserve-a-reserved-request-when-it-is-comp.patch
1 From a7f9c2009ccfdb1774995d8ee65e61093f5ca8b1 Mon Sep 17 00:00:00 2001
2 From: Kaike Wan <kaike.wan@intel.com>
3 Date: Wed, 28 Nov 2018 10:22:09 -0800
4 Subject: IB/hfi1: Unreserve a reserved request when it is completed
5
6 [ Upstream commit ca95f802ef5139722acc8d30aeaab6fe5bbe939e ]
7
8 Currently, When a reserved operation is completed, its entry in the send
9 queue will not be unreserved, which leads to the miscalculation of
10 qp->s_avail and thus the triggering of a WARN_ON call trace. This patch
11 fixes the problem by unreserving the reserved operation when it is
12 completed.
13
14 Fixes: 856cc4c237ad ("IB/hfi1: Add the capability for reserved operations")
15 Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
16 Signed-off-by: Kaike Wan <kaike.wan@intel.com>
17 Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
18 Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
19 Signed-off-by: Sasha Levin <sashal@kernel.org>
20 ---
21 drivers/infiniband/hw/hfi1/rc.c | 2 ++
22 1 file changed, 2 insertions(+)
23
24 diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
25 index 818bac1a4056..d3b8cb92fd6d 100644
26 --- a/drivers/infiniband/hw/hfi1/rc.c
27 +++ b/drivers/infiniband/hw/hfi1/rc.c
28 @@ -1162,6 +1162,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
29 if (cmp_psn(wqe->lpsn, qp->s_sending_psn) >= 0 &&
30 cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
31 break;
32 + rvt_qp_wqe_unreserve(qp, wqe);
33 s_last = qp->s_last;
34 trace_hfi1_qp_send_completion(qp, wqe, s_last);
35 if (++s_last >= qp->s_size)
36 @@ -1214,6 +1215,7 @@ static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
37 u32 s_last;
38
39 rvt_put_swqe(wqe);
40 + rvt_qp_wqe_unreserve(qp, wqe);
41 s_last = qp->s_last;
42 trace_hfi1_qp_send_completion(qp, wqe, s_last);
43 if (++s_last >= qp->s_size)
44 --
45 2.19.1
46