Commit 2f38fd99 authored by wangshuaiwei's avatar wangshuaiwei Committed by Martin K. Petersen
Browse files

scsi: ufs: core: Fix shift out of bounds when MAXQ=32



According to JESD223F, the maximum number of queues (MAXQ) is 32. When MCQ
is enabled and ESI is disabled, nr_hw_queues=32 causes a shift overflow
problem.

Fix this by using 64-bit intermediate values to handle the nr_hw_queues=32
case safely.

Signed-off-by: default avatarwangshuaiwei <wangshuaiwei1@xiaomi.com>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20260224063228.50112-1-wangshuaiwei1@xiaomi.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 62c01537
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7110,7 +7110,7 @@ static irqreturn_t ufshcd_handle_mcq_cq_events(struct ufs_hba *hba)

	ret = ufshcd_vops_get_outstanding_cqs(hba, &outstanding_cqs);
	if (ret)
		outstanding_cqs = (1U << hba->nr_hw_queues) - 1;
		outstanding_cqs = (1ULL << hba->nr_hw_queues) - 1;

	/* Exclude the poll queues */
	nr_queues = hba->nr_hw_queues - hba->nr_queues[HCTX_TYPE_POLL];