mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 03:20:53 +07:00
IB/mthca: memfree completion with error FW bug workaround
Memfree firmware is in rare cases reporting WQE index == base - 1 in receive completion with error, instead of (rq size - 1); base is 0 in mthca. Here is a patch to avoid kernel crash and report a correct WR id in this case. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
13aa6ecb47
commit
4e56ea794e
@ -540,8 +540,17 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
|
||||
entry->wr_id = srq->wrid[wqe_index];
|
||||
mthca_free_srq_wqe(srq, wqe);
|
||||
} else {
|
||||
s32 wqe;
|
||||
wq = &(*cur_qp)->rq;
|
||||
wqe_index = be32_to_cpu(cqe->wqe) >> wq->wqe_shift;
|
||||
wqe = be32_to_cpu(cqe->wqe);
|
||||
wqe_index = wqe >> wq->wqe_shift;
|
||||
/*
|
||||
* WQE addr == base - 1 might be reported in receive completion
|
||||
* with error instead of (rq size - 1) by Sinai FW 1.0.800 and
|
||||
* Arbel FW 5.1.400. This bug should be fixed in later FW revs.
|
||||
*/
|
||||
if (unlikely(wqe_index < 0))
|
||||
wqe_index = wq->max - 1;
|
||||
entry->wr_id = (*cur_qp)->wrid[wqe_index];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user