mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
RDMA/hns: Fix timeout attr in query qp for HIP08
[ Upstream commit58caa2a51a] On HIP08, the queried timeout attr is different from the timeout attr configured by the user. It is found by rdma-core testcase test_rdmacm_async_traffic: ====================================================================== FAIL: test_rdmacm_async_traffic (tests.test_rdmacm.CMTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "./tests/test_rdmacm.py", line 33, in test_rdmacm_async_traffic self.two_nodes_rdmacm_traffic(CMAsyncConnection, self.rdmacm_traffic, File "./tests/base.py", line 382, in two_nodes_rdmacm_traffic raise(res) AssertionError Fixes:926a01dc00("RDMA/hns: Add QP operations support for hip08 SoC") Link: https://lore.kernel.org/r/20230512092245.344442-2-huangjunxian6@hisilicon.com Signed-off-by: Chengchang Tang <tangchengchang@huawei.com> Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
241de3fec1
commit
38771c0eef
@@ -5136,7 +5136,6 @@ static int hns_roce_v2_set_abs_fields(struct ib_qp *ibqp,
|
|||||||
static bool check_qp_timeout_cfg_range(struct hns_roce_dev *hr_dev, u8 *timeout)
|
static bool check_qp_timeout_cfg_range(struct hns_roce_dev *hr_dev, u8 *timeout)
|
||||||
{
|
{
|
||||||
#define QP_ACK_TIMEOUT_MAX_HIP08 20
|
#define QP_ACK_TIMEOUT_MAX_HIP08 20
|
||||||
#define QP_ACK_TIMEOUT_OFFSET 10
|
|
||||||
#define QP_ACK_TIMEOUT_MAX 31
|
#define QP_ACK_TIMEOUT_MAX 31
|
||||||
|
|
||||||
if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08) {
|
if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08) {
|
||||||
@@ -5145,7 +5144,7 @@ static bool check_qp_timeout_cfg_range(struct hns_roce_dev *hr_dev, u8 *timeout)
|
|||||||
"local ACK timeout shall be 0 to 20.\n");
|
"local ACK timeout shall be 0 to 20.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*timeout += QP_ACK_TIMEOUT_OFFSET;
|
*timeout += HNS_ROCE_V2_QP_ACK_TIMEOUT_OFS_HIP08;
|
||||||
} else if (hr_dev->pci_dev->revision > PCI_REVISION_ID_HIP08) {
|
} else if (hr_dev->pci_dev->revision > PCI_REVISION_ID_HIP08) {
|
||||||
if (*timeout > QP_ACK_TIMEOUT_MAX) {
|
if (*timeout > QP_ACK_TIMEOUT_MAX) {
|
||||||
ibdev_warn(&hr_dev->ib_dev,
|
ibdev_warn(&hr_dev->ib_dev,
|
||||||
@@ -5431,6 +5430,18 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u8 get_qp_timeout_attr(struct hns_roce_dev *hr_dev,
|
||||||
|
struct hns_roce_v2_qp_context *context)
|
||||||
|
{
|
||||||
|
u8 timeout;
|
||||||
|
|
||||||
|
timeout = (u8)hr_reg_read(context, QPC_AT);
|
||||||
|
if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08)
|
||||||
|
timeout -= HNS_ROCE_V2_QP_ACK_TIMEOUT_OFS_HIP08;
|
||||||
|
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
|
||||||
static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
|
static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
|
||||||
int qp_attr_mask,
|
int qp_attr_mask,
|
||||||
struct ib_qp_init_attr *qp_init_attr)
|
struct ib_qp_init_attr *qp_init_attr)
|
||||||
@@ -5508,7 +5519,7 @@ static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
|
|||||||
qp_attr->max_dest_rd_atomic = 1 << hr_reg_read(&context, QPC_RR_MAX);
|
qp_attr->max_dest_rd_atomic = 1 << hr_reg_read(&context, QPC_RR_MAX);
|
||||||
|
|
||||||
qp_attr->min_rnr_timer = (u8)hr_reg_read(&context, QPC_MIN_RNR_TIME);
|
qp_attr->min_rnr_timer = (u8)hr_reg_read(&context, QPC_MIN_RNR_TIME);
|
||||||
qp_attr->timeout = (u8)hr_reg_read(&context, QPC_AT);
|
qp_attr->timeout = get_qp_timeout_attr(hr_dev, &context);
|
||||||
qp_attr->retry_cnt = hr_reg_read(&context, QPC_RETRY_NUM_INIT);
|
qp_attr->retry_cnt = hr_reg_read(&context, QPC_RETRY_NUM_INIT);
|
||||||
qp_attr->rnr_retry = hr_reg_read(&context, QPC_RNR_NUM_INIT);
|
qp_attr->rnr_retry = hr_reg_read(&context, QPC_RNR_NUM_INIT);
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,8 @@
|
|||||||
#define HNS_ROCE_V2_IDX_ENTRY_SZ 4
|
#define HNS_ROCE_V2_IDX_ENTRY_SZ 4
|
||||||
|
|
||||||
#define HNS_ROCE_V2_SCCC_SZ 32
|
#define HNS_ROCE_V2_SCCC_SZ 32
|
||||||
|
#define HNS_ROCE_V2_QP_ACK_TIMEOUT_OFS_HIP08 10
|
||||||
|
|
||||||
#define HNS_ROCE_V3_SCCC_SZ 64
|
#define HNS_ROCE_V3_SCCC_SZ 64
|
||||||
#define HNS_ROCE_V3_GMV_ENTRY_SZ 32
|
#define HNS_ROCE_V3_GMV_ENTRY_SZ 32
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user