From: Zoe Cheimets <[email protected]>
In bnxt_ring.c, the result on line 389 was auto-sign extended by
the compiler because the arithmetic result is an int, but the
dpi_offset is uint64_t. Fix by casting the result to uint64_t
before the multiplication forces extension. To ensure that a
negative integer is not being cast to uint64_t, add a check in
the if-statement.
Fixes: 7a1f9c782b50 ("net/bnxt: add multi-doorbell support")
Cc: [email protected]
Signed-off-by: Zoe Cheimets <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
drivers/net/bnxt/bnxt_ring.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index ccca779b97..579b73d2ce 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -385,9 +385,10 @@ void bnxt_set_db(struct bnxt *bp,
db->doorbell = (char *)bp->doorbell_base + db_offset;
if (bp->fw_cap & BNXT_FW_CAP_MULTI_DB &&
- dpi != BNXT_PRIVILEGED_DPI) {
- dpi_offset = (dpi - bp->nq_dpi_start) *
- bp->db_page_size;
+ dpi != BNXT_PRIVILEGED_DPI &&
+ dpi >= bp->nq_dpi_start) {
+ dpi_offset = (uint64_t)(dpi - bp->nq_dpi_start) *
+ bp->db_page_size;
db->doorbell = (char *)db->doorbell + dpi_offset;
}
db->db_key64 |= (uint64_t)fid << DBR_XID_SFT;
--
2.47.3