From: Shreyas Deodhar <sdeodhar@marvell.com>
Date: Thu, 10 Mar 2022 01:26:03 -0800
Subject: scsi: qla2xxx: Increase max limit of ql2xnvme_queues
Patch-mainline: v5.18-rc1
Git-commit: 3648bcf1c1374e9f42d241d83e2e50c0ef07a852
References: bsc#1197661
Increase max limit of ql2xnvme_queues to (max_qpair - 1).
Link: https://lore.kernel.org/r/20220310092604.22950-13-njavali@marvell.com
Fixes: 65120de26a54 ("scsi: qla2xxx: Add ql2xnvme_queues module param to configure number of NVMe queues")
Cc: stable@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Acked-by: Daniel Wagner <dwagner@suse.de>
---
drivers/scsi/qla2xxx/qla_nvme.c | 15 ++++++++++-----
drivers/scsi/qla2xxx/qla_nvme.h | 1 -
drivers/scsi/qla2xxx/qla_os.c | 1 -
3 files changed, 10 insertions(+), 7 deletions(-)
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -797,17 +797,22 @@ int qla_nvme_register_hba(struct scsi_ql
ha = vha->hw;
tmpl = &qla_nvme_fc_transport;
- if (ql2xnvme_queues < MIN_NVME_HW_QUEUES || ql2xnvme_queues > MAX_NVME_HW_QUEUES) {
+ if (ql2xnvme_queues < MIN_NVME_HW_QUEUES) {
ql_log(ql_log_warn, vha, 0xfffd,
- "ql2xnvme_queues=%d is out of range(MIN:%d - MAX:%d). Resetting ql2xnvme_queues to:%d\n",
- ql2xnvme_queues, MIN_NVME_HW_QUEUES, MAX_NVME_HW_QUEUES,
- DEF_NVME_HW_QUEUES);
+ "ql2xnvme_queues=%d is lower than minimum queues: %d. Resetting ql2xnvme_queues to:%d\n",
+ ql2xnvme_queues, MIN_NVME_HW_QUEUES, DEF_NVME_HW_QUEUES);
ql2xnvme_queues = DEF_NVME_HW_QUEUES;
+ } else if (ql2xnvme_queues > (ha->max_qpairs - 1)) {
+ ql_log(ql_log_warn, vha, 0xfffd,
+ "ql2xnvme_queues=%d is greater than available IRQs: %d. Resetting ql2xnvme_queues to: %d\n",
+ ql2xnvme_queues, (ha->max_qpairs - 1),
+ (ha->max_qpairs - 1));
+ ql2xnvme_queues = ((ha->max_qpairs - 1));
}
qla_nvme_fc_transport.max_hw_queues =
min((uint8_t)(ql2xnvme_queues),
- (uint8_t)(ha->max_qpairs ? ha->max_qpairs : 1));
+ (uint8_t)((ha->max_qpairs - 1) ? (ha->max_qpairs - 1) : 1));
ql_log(ql_log_info, vha, 0xfffb,
"Number of NVME queues used for this port: %d\n",
--- a/drivers/scsi/qla2xxx/qla_nvme.h
+++ b/drivers/scsi/qla2xxx/qla_nvme.h
@@ -15,7 +15,6 @@
#include "qla_dsd.h"
#define MIN_NVME_HW_QUEUES 1
-#define MAX_NVME_HW_QUEUES 128
#define DEF_NVME_HW_QUEUES 8
#define NVME_ATIO_CMD_OFF 32
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -351,7 +351,6 @@ MODULE_PARM_DESC(ql2xnvme_queues,
"Number of NVMe Queues that can be configured.\n"
"Final value will be min(ql2xnvme_queues, num_cpus,num_chip_queues)\n"
"1 - Minimum number of queues supported\n"
- "128 - Maximum number of queues supported\n"
"8 - Default value");
static struct scsi_transport_template *qla2xxx_transport_template = NULL;