| From 118f767413ada4eef7825fbd4af7c0866f883441 Mon Sep 17 00:00:00 2001 |
| From: Kamal Heib <kamalheib1@gmail.com> |
| Date: Wed, 25 May 2022 16:20:29 +0300 |
| Subject: RDMA/qedr: Fix reporting QP timeout attribute |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Kamal Heib <kamalheib1@gmail.com> |
| |
| commit 118f767413ada4eef7825fbd4af7c0866f883441 upstream. |
| |
| Make sure to save the passed QP timeout attribute when the QP gets modified, |
| so when calling query QP the right value is reported and not the |
| converted value that is required by the firmware. This issue was found |
| while running the pyverbs tests. |
| |
| Fixes: cecbcddf6461 ("qedr: Add support for QP verbs") |
| Link: https://lore.kernel.org/r/20220525132029.84813-1-kamalheib1@gmail.com |
| Signed-off-by: Kamal Heib <kamalheib1@gmail.com> |
| Acked-by: Michal Kalderon <michal.kalderon@marvell.com> |
| Signed-off-by: Leon Romanovsky <leonro@nvidia.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/infiniband/hw/qedr/qedr.h | 1 + |
| drivers/infiniband/hw/qedr/verbs.c | 4 +++- |
| 2 files changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/infiniband/hw/qedr/qedr.h |
| +++ b/drivers/infiniband/hw/qedr/qedr.h |
| @@ -418,6 +418,7 @@ struct qedr_qp { |
| u32 sq_psn; |
| u32 qkey; |
| u32 dest_qp_num; |
| + u8 timeout; |
| |
| /* Relevant to qps created from kernel space only (ULPs) */ |
| u8 prev_wqe_size; |
| --- a/drivers/infiniband/hw/qedr/verbs.c |
| +++ b/drivers/infiniband/hw/qedr/verbs.c |
| @@ -2622,6 +2622,8 @@ int qedr_modify_qp(struct ib_qp *ibqp, s |
| 1 << max_t(int, attr->timeout - 8, 0); |
| else |
| qp_params.ack_timeout = 0; |
| + |
| + qp->timeout = attr->timeout; |
| } |
| |
| if (attr_mask & IB_QP_RETRY_CNT) { |
| @@ -2781,7 +2783,7 @@ int qedr_query_qp(struct ib_qp *ibqp, |
| rdma_ah_set_dgid_raw(&qp_attr->ah_attr, ¶ms.dgid.bytes[0]); |
| rdma_ah_set_port_num(&qp_attr->ah_attr, 1); |
| rdma_ah_set_sl(&qp_attr->ah_attr, 0); |
| - qp_attr->timeout = params.timeout; |
| + qp_attr->timeout = qp->timeout; |
| qp_attr->rnr_retry = params.rnr_retry; |
| qp_attr->retry_cnt = params.retry_cnt; |
| qp_attr->min_rnr_timer = params.min_rnr_nak_timer; |