mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-19 17:14:40 +08:00
RDMA/hns: Add a check to ensure integer mtu is positive
GCC may reports an running time assert error when a value calculated from ib_mtu_enum_to_int() is using as 'val' in FIELD_PREDP: include/linux/compiler_types.h:328:38: error: call to '__compiletime_assert_1524' declared with attribute error: FIELD_PREP: value too large for the field So a check is added about whether integer mtu from ib_mtu_enum_to_int() is negative to avoid this warning. Link: https://lore.kernel.org/r/1624262443-24528-3-git-send-email-liweihang@huawei.com Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Weihang Li <liweihang@huawei.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
78c1da5270
commit
fe331da0f2
@ -4509,12 +4509,13 @@ static int modify_qp_init_to_rtr(struct ib_qp *ibqp,
|
|||||||
struct ib_device *ibdev = &hr_dev->ib_dev;
|
struct ib_device *ibdev = &hr_dev->ib_dev;
|
||||||
dma_addr_t trrl_ba;
|
dma_addr_t trrl_ba;
|
||||||
dma_addr_t irrl_ba;
|
dma_addr_t irrl_ba;
|
||||||
enum ib_mtu mtu;
|
enum ib_mtu ib_mtu;
|
||||||
u8 lp_pktn_ini;
|
u8 lp_pktn_ini;
|
||||||
u64 *mtts;
|
u64 *mtts;
|
||||||
u8 *dmac;
|
u8 *dmac;
|
||||||
u8 *smac;
|
u8 *smac;
|
||||||
u32 port;
|
u32 port;
|
||||||
|
int mtu;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = config_qp_rq_buf(hr_dev, hr_qp, context, qpc_mask);
|
ret = config_qp_rq_buf(hr_dev, hr_qp, context, qpc_mask);
|
||||||
@ -4598,19 +4599,23 @@ static int modify_qp_init_to_rtr(struct ib_qp *ibqp,
|
|||||||
roce_set_field(qpc_mask->byte_52_udpspn_dmac, V2_QPC_BYTE_52_DMAC_M,
|
roce_set_field(qpc_mask->byte_52_udpspn_dmac, V2_QPC_BYTE_52_DMAC_M,
|
||||||
V2_QPC_BYTE_52_DMAC_S, 0);
|
V2_QPC_BYTE_52_DMAC_S, 0);
|
||||||
|
|
||||||
mtu = get_mtu(ibqp, attr);
|
ib_mtu = get_mtu(ibqp, attr);
|
||||||
hr_qp->path_mtu = mtu;
|
hr_qp->path_mtu = ib_mtu;
|
||||||
|
|
||||||
|
mtu = ib_mtu_enum_to_int(ib_mtu);
|
||||||
|
if (WARN_ON(mtu < 0))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (attr_mask & IB_QP_PATH_MTU) {
|
if (attr_mask & IB_QP_PATH_MTU) {
|
||||||
roce_set_field(context->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
|
roce_set_field(context->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
|
||||||
V2_QPC_BYTE_24_MTU_S, mtu);
|
V2_QPC_BYTE_24_MTU_S, ib_mtu);
|
||||||
roce_set_field(qpc_mask->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
|
roce_set_field(qpc_mask->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
|
||||||
V2_QPC_BYTE_24_MTU_S, 0);
|
V2_QPC_BYTE_24_MTU_S, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_LP_MSG_LEN 65536
|
#define MAX_LP_MSG_LEN 65536
|
||||||
/* MTU * (2 ^ LP_PKTN_INI) shouldn't be bigger than 64KB */
|
/* MTU * (2 ^ LP_PKTN_INI) shouldn't be bigger than 64KB */
|
||||||
lp_pktn_ini = ilog2(MAX_LP_MSG_LEN / ib_mtu_enum_to_int(mtu));
|
lp_pktn_ini = ilog2(MAX_LP_MSG_LEN / mtu);
|
||||||
|
|
||||||
roce_set_field(context->byte_56_dqpn_err, V2_QPC_BYTE_56_LP_PKTN_INI_M,
|
roce_set_field(context->byte_56_dqpn_err, V2_QPC_BYTE_56_LP_PKTN_INI_M,
|
||||||
V2_QPC_BYTE_56_LP_PKTN_INI_S, lp_pktn_ini);
|
V2_QPC_BYTE_56_LP_PKTN_INI_S, lp_pktn_ini);
|
||||||
|
Loading…
Reference in New Issue
Block a user