Re: [PATCH v3 14/24] mpi3mr: add change queue depth support

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

 




> On Apr 19, 2021, at 6:01 AM, Kashyap Desai <kashyap.desai@xxxxxxxxxxxx> wrote:
> 
> Signed-off-by: Kashyap Desai <kashyap.desai@xxxxxxxxxxxx>
> Reviewed-by: Hannes Reinecke <hare@xxxxxxx>
> Reviewed-by: Tomas Henzl <thenzl@xxxxxxxxxx>
> 
> Cc: sathya.prakash@xxxxxxxxxxxx
> ---
> drivers/scsi/mpi3mr/mpi3mr.h    |  3 +++
> drivers/scsi/mpi3mr/mpi3mr_os.c | 35 ++++++++++++++++++++++++++++++++-
> 2 files changed, 37 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/mpi3mr/mpi3mr.h b/drivers/scsi/mpi3mr/mpi3mr.h
> index fe6c815b918a..e3ce54f877fa 100644
> --- a/drivers/scsi/mpi3mr/mpi3mr.h
> +++ b/drivers/scsi/mpi3mr/mpi3mr.h
> @@ -141,6 +141,9 @@ extern struct list_head mrioc_list;
> /* Command retry count definitions */
> #define MPI3MR_DEV_RMHS_RETRY_COUNT 3
> 
> +/* Default target device queue depth */
> +#define MPI3MR_DEFAULT_SDEV_QD	32
> +
> /* SGE Flag definition */
> #define MPI3MR_SGEFLAGS_SYSTEM_SIMPLE_END_OF_LIST \
> 	(MPI3_SGE_FLAGS_ELEMENT_TYPE_SIMPLE | MPI3_SGE_FLAGS_DLAS_SYSTEM | \
> diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
> index fd5fdc61169e..99a60e6777d5 100644
> --- a/drivers/scsi/mpi3mr/mpi3mr_os.c
> +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
> @@ -649,6 +649,34 @@ static int mpi3mr_report_tgtdev_to_host(struct mpi3mr_ioc *mrioc,
> 	return retval;
> }
> 
> +/**
> + * mpi3mr_change_queue_depth- Change QD callback handler
> + * @sdev: SCSI device reference
> + * @q_depth: Queue depth
> + *
> + * Validate and limit QD and call scsi_change_queue_depth.
> + *
> + * Return: return value of scsi_change_queue_depth
> + */
> +static int mpi3mr_change_queue_depth(struct scsi_device *sdev,
> +	int q_depth)
> +{
> +	struct scsi_target *starget = scsi_target(sdev);
> +	struct Scsi_Host *shost = dev_to_shost(&starget->dev);
> +	int retval = 0;
> +
> +	if (!sdev->tagged_supported)
> +		q_depth = 1;
> +	if (q_depth > shost->can_queue)
> +		q_depth = shost->can_queue;
> +	else if (!q_depth)
> +		q_depth = MPI3MR_DEFAULT_SDEV_QD;
> +	retval = scsi_change_queue_depth(sdev, q_depth);
> +
> +	return retval;
> +}
> +
> +
> /**
>  * mpi3mr_update_sdev - Update SCSI device information
>  * @sdev: SCSI device reference
> @@ -669,6 +697,7 @@ mpi3mr_update_sdev(struct scsi_device *sdev, void *data)
> 	if (!tgtdev)
> 		return;
> 
> +	mpi3mr_change_queue_depth(sdev, tgtdev->q_depth);
> 	switch (tgtdev->dev_type) {
> 	case MPI3_DEVICE_DEVFORM_PCIE:
> 		/*The block layer hw sector size = 512*/
> @@ -2650,9 +2679,12 @@ static int mpi3mr_slave_configure(struct scsi_device *sdev)
> 	spin_lock_irqsave(&mrioc->tgtdev_lock, flags);
> 	tgt_dev = __mpi3mr_get_tgtdev_by_perst_id(mrioc, starget->id);
> 	spin_unlock_irqrestore(&mrioc->tgtdev_lock, flags);
> -	if (!tgt_dev)
> +	if (!tgt_dev) {
> +		mpi3mr_change_queue_depth(sdev, MPI3MR_DEFAULT_SDEV_QD);
> 		return retval;
> +	}
> 
> +	mpi3mr_change_queue_depth(sdev, tgt_dev->q_depth);
> 	switch (tgt_dev->dev_type) {
> 	case MPI3_DEVICE_DEVFORM_PCIE:
> 		/*The block layer hw sector size = 512*/
> @@ -2892,6 +2924,7 @@ static struct scsi_host_template mpi3mr_driver_template = {
> 	.slave_destroy			= mpi3mr_slave_destroy,
> 	.scan_finished			= mpi3mr_scan_finished,
> 	.scan_start			= mpi3mr_scan_start,
> +	.change_queue_depth		= mpi3mr_change_queue_depth,
> 	.eh_device_reset_handler	= mpi3mr_eh_dev_reset,
> 	.eh_target_reset_handler	= mpi3mr_eh_target_reset,
> 	.eh_host_reset_handler		= mpi3mr_eh_host_reset,
> -- 
> 2.18.1
> 

Looks Good.

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