Commit 30281091 authored by Alan Stern's avatar Alan Stern Committed by James Bottomley

[PATCH] Make the scsi error handler bus settle delay a per template option

On 1 Jun 2004, James Bottomley wrote:
> On Tue, 2004-06-01 at 15:29, Alan Stern wrote:
> > In addition, the settle-time delays would have to be removed from the
> > error handler -- which means adding it to all the low-level drivers.  Is
> > that doable?
>
> Well, for 2.6, I think that a simple flag indicating that the driver
> will implement it's own timeout should suffice rather than altering
> every LLD...
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent d0f6f938
...@@ -1026,7 +1026,8 @@ static int scsi_try_bus_reset(struct scsi_cmnd *scmd) ...@@ -1026,7 +1026,8 @@ static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
spin_unlock_irqrestore(scmd->device->host->host_lock, flags); spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
if (rtn == SUCCESS) { if (rtn == SUCCESS) {
scsi_sleep(BUS_RESET_SETTLE_TIME); if (!scmd->device->host->hostt->skip_settle_delay)
scsi_sleep(BUS_RESET_SETTLE_TIME);
spin_lock_irqsave(scmd->device->host->host_lock, flags); spin_lock_irqsave(scmd->device->host->host_lock, flags);
scsi_report_bus_reset(scmd->device->host, scmd->device->channel); scsi_report_bus_reset(scmd->device->host, scmd->device->channel);
spin_unlock_irqrestore(scmd->device->host->host_lock, flags); spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
...@@ -1057,7 +1058,8 @@ static int scsi_try_host_reset(struct scsi_cmnd *scmd) ...@@ -1057,7 +1058,8 @@ static int scsi_try_host_reset(struct scsi_cmnd *scmd)
spin_unlock_irqrestore(scmd->device->host->host_lock, flags); spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
if (rtn == SUCCESS) { if (rtn == SUCCESS) {
scsi_sleep(HOST_RESET_SETTLE_TIME); if (!scmd->device->host->hostt->skip_settle_delay)
scsi_sleep(HOST_RESET_SETTLE_TIME);
spin_lock_irqsave(scmd->device->host->host_lock, flags); spin_lock_irqsave(scmd->device->host->host_lock, flags);
scsi_report_bus_reset(scmd->device->host, scmd->device->channel); scsi_report_bus_reset(scmd->device->host, scmd->device->channel);
spin_unlock_irqrestore(scmd->device->host->host_lock, flags); spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
......
...@@ -409,6 +409,9 @@ struct scsi_host_template usb_stor_host_template = { ...@@ -409,6 +409,9 @@ struct scsi_host_template usb_stor_host_template = {
/* emulated HBA */ /* emulated HBA */
.emulated = TRUE, .emulated = TRUE,
/* we do our own delay after a device or bus reset */
.skip_settle_delay = 1,
/* sysfs device attributes */ /* sysfs device attributes */
.sdev_attrs = sysfs_device_attr_list, .sdev_attrs = sysfs_device_attr_list,
......
...@@ -313,6 +313,11 @@ struct scsi_host_template { ...@@ -313,6 +313,11 @@ struct scsi_host_template {
*/ */
unsigned emulated:1; unsigned emulated:1;
/*
* True if the low-level driver performs its own reset-settle delays.
*/
unsigned skip_settle_delay:1;
/* /*
* Countdown for host blocking with no commands outstanding * Countdown for host blocking with no commands outstanding
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment