scsi: mpi3mr: Add change queue depth support
Link: https://lore.kernel.org/r/20210520152545.2710479-15-kashyap.desai@broadcom.com Cc: sathya.prakash@broadcom.com Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
e844adb1fb
Коммит
0ea177343f
|
@ -146,6 +146,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 | \
|
||||
|
|
|
@ -643,6 +643,33 @@ out:
|
|||
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
|
||||
|
@ -663,6 +690,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*/
|
||||
|
@ -2623,6 +2651,7 @@ static int mpi3mr_slave_configure(struct scsi_device *sdev)
|
|||
if (!tgt_dev)
|
||||
return -ENXIO;
|
||||
|
||||
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*/
|
||||
|
@ -2876,6 +2905,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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче