aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVasu Dev <vasu.dev@intel.com>2009-10-22 18:46:33 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:00:44 -0500
commit4a84067dbfce436b81779e585bf712b02ceee552 (patch)
treef787d413a11c6564ad4440d0a245f56d0e6b73bf /include
parent14caf44c69184ed72d46a2f883311daf27a4192f (diff)
[SCSI] add queue_depth ramp up code
Current FC HBA queue_depth ramp up code depends on last queue full time. The sdev already has last_queue_full_time field to track last queue full time but stored value is truncated by last four bits. So this patch updates last_queue_full_time without truncating last 4 bits to store full value and then updates its only current usages in scsi_track_queue_full to ignore last four bits to keep current usages same while also use this field in added ramp up code. Adds scsi_handle_queue_ramp_up to ramp up queue_depth on successful completion of IO. The scsi_handle_queue_ramp_up will do ramp up on all luns of a target, just same as ramp down done on all luns on a target. The ramp up is skipped in case the change_queue_depth is not supported by LLD or already reached to added max_queue_depth. Updates added max_queue_depth on every new update to default queue_depth value. The ramp up is also skipped if lapsed time since either last queue ramp up or down is less than LLD specified queue_ramp_up_period. Adds queue_ramp_up_period to sysfs but only if change_queue_depth is supported since ramp up and queue_ramp_up_period is needed only in case change_queue_depth is supported first. Initializes queue_ramp_up_period to 120HZ jiffies as initial default value, it is same as used in existing lpfc and qla2xxx. -v2 Combined all ramp code into this single patch. -v3 Moves max_queue_depth initialization after slave_configure is called from after slave_alloc calling done. Also adjusted max_queue_depth check to skip ramp up if current queue_depth is >= max_queue_depth. -v4 Changes sdev->queue_ramp_up_period unit to ms when using sysfs i/f to store or show its value. Signed-off-by: Vasu Dev <vasu.dev@intel.com> Tested-by: Christof Schmitt <christof.schmitt@de.ibm.com> Tested-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'include')
-rw-r--r--include/scsi/scsi_device.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 9af48cbf0036..92c4c3bd916d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -81,11 +81,14 @@ struct scsi_device {
81 struct list_head starved_entry; 81 struct list_head starved_entry;
82 struct scsi_cmnd *current_cmnd; /* currently active command */ 82 struct scsi_cmnd *current_cmnd; /* currently active command */
83 unsigned short queue_depth; /* How deep of a queue we want */ 83 unsigned short queue_depth; /* How deep of a queue we want */
84 unsigned short max_queue_depth; /* max queue depth */
84 unsigned short last_queue_full_depth; /* These two are used by */ 85 unsigned short last_queue_full_depth; /* These two are used by */
85 unsigned short last_queue_full_count; /* scsi_track_queue_full() */ 86 unsigned short last_queue_full_count; /* scsi_track_queue_full() */
86 unsigned long last_queue_full_time;/* don't let QUEUE_FULLs on the same 87 unsigned long last_queue_full_time; /* last queue full time */
87 jiffie count on our counter, they 88 unsigned long queue_ramp_up_period; /* ramp up period in jiffies */
88 could all be from the same event. */ 89#define SCSI_DEFAULT_RAMP_UP_PERIOD (120 * HZ)
90
91 unsigned long last_queue_ramp_up; /* last queue ramp up time */
89 92
90 unsigned int id, lun, channel; 93 unsigned int id, lun, channel;
91 94