diff options
author | Finn Thain <fthain@telegraphics.com.au> | 2016-01-03 16:05:23 +1100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-01-06 21:42:56 -0500 |
commit | ae753a3387504daa11b8779a00d37923f971c6d0 (patch) | |
tree | 2249c062810abfb64f7b973af8de27d0c6e49646 /drivers/scsi/NCR5380.h | |
parent | 2f854b82b001b5d05b4e1c81acb947f7bd9cee9f (diff) | |
download | linux-ae753a3387504daa11b8779a00d37923f971c6d0.tar.bz2 |
ncr5380: Eliminate selecting state
Linux v2.1.105 changed the algorithm for polling for the BSY signal
in NCR5380_select() and NCR5380_main().
Presently, this code has a bug. Back then, NCR5380_set_timer(hostdata, 1)
meant reschedule main() after sleeping for 10 ms. Repeated 25 times this
provided the recommended 250 ms selection time-out delay. This got broken
when HZ became configurable.
We could fix this but there's no need to reschedule the main loop. This
BSY polling presently happens when the NCR5380_main() work queue item
calls NCR5380_select(), which in turn schedules NCR5380_main(), which
calls NCR5380_select() again, and so on.
This algorithm is a deviation from the simpler one in atari_NCR5380.c.
The extra complexity and state is pointless. There's no reason to
stop selection half-way and return to to the main loop when the main
loop can do nothing useful until selection completes.
So just poll for BSY. We can sleep while polling now that we have a
suitable workqueue.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Tested-by: Ondrej Zary <linux@rainbow-software.org>
Tested-by: Michael Schmitz <schmitzmic@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/NCR5380.h')
-rw-r--r-- | drivers/scsi/NCR5380.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/drivers/scsi/NCR5380.h b/drivers/scsi/NCR5380.h index 412a344ac676..ee084e90e25c 100644 --- a/drivers/scsi/NCR5380.h +++ b/drivers/scsi/NCR5380.h @@ -267,8 +267,6 @@ struct NCR5380_hostdata { volatile struct scsi_cmnd *disconnected_queue; /* waiting for reconnect */ int flags; unsigned long time_expires; /* in jiffies, set prior to sleeping */ - int select_time; /* timer in select for target response */ - volatile struct scsi_cmnd *selecting; struct delayed_work coroutine; /* our co-routine */ struct scsi_eh_save ses; char info[256]; |