提交 a0ddc2ec 编写于 作者: S Somnath Kotur 提交者: Doug Ledford

bnxt_re: Fix incorrect usage of test_bit()

test_bit() takes a bit number while the 'flags' field in
struct bnxt_qplib_rcfw was using actual BIT position converted
values.
Fix this by assigning bit numbers and use consistent APIs
all the flag values.
Also logging a message in case of failure.

Thanks to Dan Carpenter for pointing this out.
Suggested-by: NDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: NSomnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 6a28d5a9
...@@ -1071,9 +1071,10 @@ static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev) ...@@ -1071,9 +1071,10 @@ static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev)
*/ */
rc = bnxt_qplib_alloc_rcfw_channel(rdev->en_dev->pdev, &rdev->rcfw, rc = bnxt_qplib_alloc_rcfw_channel(rdev->en_dev->pdev, &rdev->rcfw,
BNXT_RE_MAX_QPC_COUNT); BNXT_RE_MAX_QPC_COUNT);
if (rc) if (rc) {
pr_err("Failed to allocate RCFW Channel: %#x\n", rc);
goto fail; goto fail;
}
rc = bnxt_re_net_ring_alloc rc = bnxt_re_net_ring_alloc
(rdev, rdev->rcfw.creq.pbl[PBL_LVL_0].pg_map_arr, (rdev, rdev->rcfw.creq.pbl[PBL_LVL_0].pg_map_arr,
rdev->rcfw.creq.pbl[rdev->rcfw.creq.level].pg_count, rdev->rcfw.creq.pbl[rdev->rcfw.creq.level].pg_count,
......
...@@ -168,14 +168,14 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req, ...@@ -168,14 +168,14 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
rcfw->seq_num++; rcfw->seq_num++;
cmdq_prod = cmdq->prod; cmdq_prod = cmdq->prod;
if (rcfw->flags & FIRMWARE_FIRST_FLAG) { if (test_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags)) {
/* The very first doorbell write /* The very first doorbell write
* is required to set this flag * is required to set this flag
* which prompts the FW to reset * which prompts the FW to reset
* its internal pointers * its internal pointers
*/ */
cmdq_prod |= FIRMWARE_FIRST_FLAG; cmdq_prod |= BIT(FIRMWARE_FIRST_FLAG);
rcfw->flags &= ~FIRMWARE_FIRST_FLAG; clear_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags);
} }
/* ring CMDQ DB */ /* ring CMDQ DB */
...@@ -618,7 +618,7 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev, ...@@ -618,7 +618,7 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
/* General */ /* General */
rcfw->seq_num = 0; rcfw->seq_num = 0;
rcfw->flags = FIRMWARE_FIRST_FLAG; set_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags);
bmap_size = BITS_TO_LONGS(RCFW_MAX_OUTSTANDING_CMD * bmap_size = BITS_TO_LONGS(RCFW_MAX_OUTSTANDING_CMD *
sizeof(unsigned long)); sizeof(unsigned long));
rcfw->cmdq_bitmap = kzalloc(bmap_size, GFP_KERNEL); rcfw->cmdq_bitmap = kzalloc(bmap_size, GFP_KERNEL);
......
...@@ -162,9 +162,9 @@ struct bnxt_qplib_rcfw { ...@@ -162,9 +162,9 @@ struct bnxt_qplib_rcfw {
unsigned long *cmdq_bitmap; unsigned long *cmdq_bitmap;
u32 bmap_size; u32 bmap_size;
unsigned long flags; unsigned long flags;
#define FIRMWARE_INITIALIZED_FLAG BIT(0) #define FIRMWARE_INITIALIZED_FLAG 0
#define FIRMWARE_FIRST_FLAG BIT(31) #define FIRMWARE_FIRST_FLAG 31
#define FIRMWARE_TIMED_OUT BIT(3) #define FIRMWARE_TIMED_OUT 3
wait_queue_head_t waitq; wait_queue_head_t waitq;
int (*aeq_handler)(struct bnxt_qplib_rcfw *, int (*aeq_handler)(struct bnxt_qplib_rcfw *,
struct creq_func_event *); struct creq_func_event *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册