mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 18:09:56 +00:00
RDMA/bnxt_re: Fix max_qp count for virtual functions
Driver has not accounted QP1 for virtual functions
when fetching device attributes and hence max_qp
count is one less than active_qp count. Fixed driver
so that it counts QP1 for virtual functions as well
while fetching device attributes
Fixes: ccd9d0d3df ("RDMA/bnxt_re: Enable RoCE on virtual functions")
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1691052326-32143-2-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
38313c6d2a
commit
f19fba1f79
@@ -1152,8 +1152,7 @@ static int bnxt_re_alloc_res(struct bnxt_re_dev *rdev)
|
|||||||
|
|
||||||
/* Configure and allocate resources for qplib */
|
/* Configure and allocate resources for qplib */
|
||||||
rdev->qplib_res.rcfw = &rdev->rcfw;
|
rdev->qplib_res.rcfw = &rdev->rcfw;
|
||||||
rc = bnxt_qplib_get_dev_attr(&rdev->rcfw, &rdev->dev_attr,
|
rc = bnxt_qplib_get_dev_attr(&rdev->rcfw, &rdev->dev_attr);
|
||||||
rdev->is_virtfn);
|
|
||||||
if (rc)
|
if (rc)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
@@ -1531,8 +1530,7 @@ static int bnxt_re_dev_init(struct bnxt_re_dev *rdev, u8 wqe_mode)
|
|||||||
rdev->pacing.dbr_pacing = false;
|
rdev->pacing.dbr_pacing = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc = bnxt_qplib_get_dev_attr(&rdev->rcfw, &rdev->dev_attr,
|
rc = bnxt_qplib_get_dev_attr(&rdev->rcfw, &rdev->dev_attr);
|
||||||
rdev->is_virtfn);
|
|
||||||
if (rc)
|
if (rc)
|
||||||
goto disable_rcfw;
|
goto disable_rcfw;
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ static void bnxt_qplib_query_version(struct bnxt_qplib_rcfw *rcfw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
|
int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
|
||||||
struct bnxt_qplib_dev_attr *attr, bool vf)
|
struct bnxt_qplib_dev_attr *attr)
|
||||||
{
|
{
|
||||||
struct creq_query_func_resp resp = {};
|
struct creq_query_func_resp resp = {};
|
||||||
struct bnxt_qplib_cmdqmsg msg = {};
|
struct bnxt_qplib_cmdqmsg msg = {};
|
||||||
@@ -121,9 +121,8 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
|
|||||||
|
|
||||||
/* Extract the context from the side buffer */
|
/* Extract the context from the side buffer */
|
||||||
attr->max_qp = le32_to_cpu(sb->max_qp);
|
attr->max_qp = le32_to_cpu(sb->max_qp);
|
||||||
/* max_qp value reported by FW for PF doesn't include the QP1 for PF */
|
/* max_qp value reported by FW doesn't include the QP1 */
|
||||||
if (!vf)
|
attr->max_qp += 1;
|
||||||
attr->max_qp += 1;
|
|
||||||
attr->max_qp_rd_atom =
|
attr->max_qp_rd_atom =
|
||||||
sb->max_qp_rd_atom > BNXT_QPLIB_MAX_OUT_RD_ATOM ?
|
sb->max_qp_rd_atom > BNXT_QPLIB_MAX_OUT_RD_ATOM ?
|
||||||
BNXT_QPLIB_MAX_OUT_RD_ATOM : sb->max_qp_rd_atom;
|
BNXT_QPLIB_MAX_OUT_RD_ATOM : sb->max_qp_rd_atom;
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
|
|||||||
struct bnxt_qplib_gid *gid, u16 gid_idx,
|
struct bnxt_qplib_gid *gid, u16 gid_idx,
|
||||||
const u8 *smac);
|
const u8 *smac);
|
||||||
int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
|
int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
|
||||||
struct bnxt_qplib_dev_attr *attr, bool vf);
|
struct bnxt_qplib_dev_attr *attr);
|
||||||
int bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,
|
int bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,
|
||||||
struct bnxt_qplib_rcfw *rcfw,
|
struct bnxt_qplib_rcfw *rcfw,
|
||||||
struct bnxt_qplib_ctx *ctx);
|
struct bnxt_qplib_ctx *ctx);
|
||||||
|
|||||||
Reference in New Issue
Block a user