Re: [PATCH 12/14] qla2xxx: Changes to support kdump kernel for NVMe BFS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Aug 5, 2021, at 5:20 AM, Nilesh Javali <njavali@xxxxxxxxxxx> wrote:
> 
> From: Saurav Kashyap <skashyap@xxxxxxxxxxx>
> 
> The MSI-X and MSI calls fails in kdump kernel, because of this
> qla2xxx_create_qpair fails leading to .create_queue callback failure.
> The fix is to return existing qpair instead of allocating new one and
> allocate single hw queue.
> 
> [   19.975838] qla2xxx [0000:d8:00.1]-00c7:11: MSI-X: Failed to enable support,
> giving   up -- 16/-28.
> [   19.984885] qla2xxx [0000:d8:00.1]-0037:11: Falling back-to MSI mode --
> ret=-28.
> [   19.992278] qla2xxx [0000:d8:00.1]-0039:11: Falling back-to INTa mode --
> ret=-28.
> ..
> ..
> ..
> [   21.141518] qla2xxx [0000:d8:00.0]-2104:2: qla_nvme_alloc_queue: handle
> 00000000e7ee499d, idx =1, qsize 32
> [   21.151166] qla2xxx [0000:d8:00.0]-0181:2: FW/Driver is not multi-queue capable.
> [   21.158558] qla2xxx [0000:d8:00.0]-2122:2: Failed to allocate qpair
> [   21.164824] nvme nvme0: NVME-FC{0}: reset: Reconnect attempt failed (-22)
> [   21.171612] nvme nvme0: NVME-FC{0}: Reconnect attempt in 2 seconds
> 
> Signed-off-by: Saurav Kashyap <skashyap@xxxxxxxxxxx>
> Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx>
> ---
> drivers/scsi/qla2xxx/qla_def.h  |  1 -
> drivers/scsi/qla2xxx/qla_isr.c  |  2 ++
> drivers/scsi/qla2xxx/qla_nvme.c | 40 +++++++++++++++------------------
> 3 files changed, 20 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
> index 60702d066ed9..55175e8a0749 100644
> --- a/drivers/scsi/qla2xxx/qla_def.h
> +++ b/drivers/scsi/qla2xxx/qla_def.h
> @@ -4022,7 +4022,6 @@ struct qla_hw_data {
> 				/* Enabled in Driver */
> 		uint32_t	scm_enabled:1;
> 		uint32_t	edif_enabled:1;
> -		uint32_t	max_req_queue_warned:1;
> 		uint32_t	plogi_template_valid:1;
> 		uint32_t	port_isolated:1;
> 	} flags;
> diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
> index b0b5af21781a..ba4a5bf5600a 100644
> --- a/drivers/scsi/qla2xxx/qla_isr.c
> +++ b/drivers/scsi/qla2xxx/qla_isr.c
> @@ -4508,6 +4508,8 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
> 		ql_dbg(ql_dbg_init, vha, 0x0125,
> 		    "INTa mode: Enabled.\n");
> 		ha->flags.mr_intr_valid = 1;
> +		/* Set max_qpair to 0, as MSI-X and MSI in not enabled */
> +		ha->max_qpairs = 0;
> 	}
> 
> clear_risc_ints:
> diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
> index 6f3c0a506509..94e350ef3028 100644
> --- a/drivers/scsi/qla2xxx/qla_nvme.c
> +++ b/drivers/scsi/qla2xxx/qla_nvme.c
> @@ -108,19 +108,24 @@ static int qla_nvme_alloc_queue(struct nvme_fc_local_port *lport,
> 		return -EINVAL;
> 	}
> 
> -	if (ha->queue_pair_map[qidx]) {
> -		*handle = ha->queue_pair_map[qidx];
> -		ql_log(ql_log_info, vha, 0x2121,
> -		    "Returning existing qpair of %px for idx=%x\n",
> -		    *handle, qidx);
> -		return 0;
> -	}
> +	/* Use base qpair if max_qpairs is 0 */
> +	if (!ha->max_qpairs) {
> +		qpair = ha->base_qpair;
> +	} else {
> +		if (ha->queue_pair_map[qidx]) {
> +			*handle = ha->queue_pair_map[qidx];
> +			ql_log(ql_log_info, vha, 0x2121,
> +			       "Returning existing qpair of %px for idx=%x\n",
> +			       *handle, qidx);
> +			return 0;
> +		}
> 
> -	qpair = qla2xxx_create_qpair(vha, 5, vha->vp_idx, true);
> -	if (qpair == NULL) {
> -		ql_log(ql_log_warn, vha, 0x2122,
> -		    "Failed to allocate qpair\n");
> -		return -EINVAL;
> +		qpair = qla2xxx_create_qpair(vha, 5, vha->vp_idx, true);
> +		if (!qpair) {
> +			ql_log(ql_log_warn, vha, 0x2122,
> +			       "Failed to allocate qpair\n");
> +			return -EINVAL;
> +		}
> 	}
> 	*handle = qpair;
> 
> @@ -731,18 +736,9 @@ int qla_nvme_register_hba(struct scsi_qla_host *vha)
> 
> 	WARN_ON(vha->nvme_local_port);
> 
> -	if (ha->max_req_queues < 3) {
> -		if (!ha->flags.max_req_queue_warned)
> -			ql_log(ql_log_info, vha, 0x2120,
> -			       "%s: Disabling FC-NVME due to lack of free queue pairs (%d).\n",
> -			       __func__, ha->max_req_queues);
> -		ha->flags.max_req_queue_warned = 1;
> -		return ret;
> -	}
> -
> 	qla_nvme_fc_transport.max_hw_queues =
> 	    min((uint8_t)(qla_nvme_fc_transport.max_hw_queues),
> -		(uint8_t)(ha->max_req_queues - 2));
> +		(uint8_t)(ha->max_qpairs ? ha->max_qpairs : 1));
> 
> 	pinfo.node_name = wwn_to_u64(vha->node_name);
> 	pinfo.port_name = wwn_to_u64(vha->port_name);
> -- 
> 2.19.0.rc0
> 

Same for this.. I would encourage to add stable for this patch? 

Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx>

--
Himanshu Madhani	 Oracle Linux Engineering





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux