RDMA/bnxt_re: wraparound mbox producer index
[ Upstream commit0af91306e1
] Driver is not handling the wraparound of the mbox producer index correctly. Currently the wraparound happens once u32 max is reached. Bit 31 of the producer index register is special and should be set only once for the first command. Because the producer index overflow setting bit31 after a long time, FW goes to initialization sequence and this causes FW hang. Fix is to wraparound the mbox producer index once it reaches u16 max. Fixes:cee0c7bba4
("RDMA/bnxt_re: Refactor command queue management code") Fixes:1ac5a40479
("RDMA/bnxt_re: Add bnxt_re RoCE driver") Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> Link: https://lore.kernel.org/r/1686308514-11996-2-git-send-email-selvin.xavier@broadcom.com Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
bf35c202a3
Коммит
79226176cd
|
@ -181,7 +181,7 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
|
|||
} while (size > 0);
|
||||
cmdq->seq_num++;
|
||||
|
||||
cmdq_prod = hwq->prod;
|
||||
cmdq_prod = hwq->prod & 0xFFFF;
|
||||
if (test_bit(FIRMWARE_FIRST_FLAG, &cmdq->flags)) {
|
||||
/* The very first doorbell write
|
||||
* is required to set this flag
|
||||
|
@ -599,7 +599,7 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res,
|
|||
rcfw->cmdq_depth = BNXT_QPLIB_CMDQE_MAX_CNT_8192;
|
||||
|
||||
sginfo.pgsize = bnxt_qplib_cmdqe_page_size(rcfw->cmdq_depth);
|
||||
hwq_attr.depth = rcfw->cmdq_depth;
|
||||
hwq_attr.depth = rcfw->cmdq_depth & 0x7FFFFFFF;
|
||||
hwq_attr.stride = BNXT_QPLIB_CMDQE_UNITS;
|
||||
hwq_attr.type = HWQ_TYPE_CTX;
|
||||
if (bnxt_qplib_alloc_init_hwq(&cmdq->hwq, &hwq_attr)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче