aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/sata_nv.c
diff options
context:
space:
mode:
authorRobert Hancock <hancockr@shaw.ca>2007-03-08 19:02:18 -0500
committerJeff Garzik <jeff@garzik.org>2007-03-09 08:41:16 -0500
commit8ba5e4cbe444f10352756b6c7715bb26bb087680 (patch)
tree6c5b274554f68bfd650f5362653aca407eb86865 /drivers/ata/sata_nv.c
parent14d66ab7e2e06d3727719d3e4eec6bf9f70251c3 (diff)
sata_nv: revert use of notifiers for now
Commit 721449bf0d51213fe3abf0ac3e3561ef9ea7827a added support for using the ADMA notifier bits to determine which commands to check for completion. However there have been reports that this causes command timeouts in certain cases. This is still being investigated. In addition, apparently the notifiers won't work if ADMA is disabled on the other port as a result of an ATAPI device being connected, and we don't handle this case properly. For now, just restore the previous behavior of checking all active commands to see if they are complete, without relying on the notifiers. Signed-off-by: Robert Hancock <hancockr@shaw.ca> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/sata_nv.c')
-rw-r--r--drivers/ata/sata_nv.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index 388d07fab5f7..9d9670a9b117 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -874,8 +874,14 @@ static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance)
874 874
875 if (status & (NV_ADMA_STAT_DONE | 875 if (status & (NV_ADMA_STAT_DONE |
876 NV_ADMA_STAT_CPBERR)) { 876 NV_ADMA_STAT_CPBERR)) {
877 u32 check_commands = notifier | notifier_error; 877 u32 check_commands;
878 int pos, error = 0; 878 int pos, error = 0;
879
880 if(ata_tag_valid(ap->active_tag))
881 check_commands = 1 << ap->active_tag;
882 else
883 check_commands = ap->sactive;
884
879 /** Check CPBs for completed commands */ 885 /** Check CPBs for completed commands */
880 while ((pos = ffs(check_commands)) && !error) { 886 while ((pos = ffs(check_commands)) && !error) {
881 pos--; 887 pos--;