aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/sata_nv.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index a0f98fdab7a0..bfe92a43cf89 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -1011,14 +1011,20 @@ static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance)
1011 } 1011 }
1012 1012
1013 if (status & (NV_ADMA_STAT_DONE | 1013 if (status & (NV_ADMA_STAT_DONE |
1014 NV_ADMA_STAT_CPBERR)) { 1014 NV_ADMA_STAT_CPBERR |
1015 u32 check_commands; 1015 NV_ADMA_STAT_CMD_COMPLETE)) {
1016 u32 check_commands = notifier_clears[i];
1016 int pos, error = 0; 1017 int pos, error = 0;
1017 1018
1018 if (ata_tag_valid(ap->link.active_tag)) 1019 if (status & NV_ADMA_STAT_CPBERR) {
1019 check_commands = 1 << ap->link.active_tag; 1020 /* Check all active commands */
1020 else 1021 if (ata_tag_valid(ap->link.active_tag))
1021 check_commands = ap->link.sactive; 1022 check_commands = 1 <<
1023 ap->link.active_tag;
1024 else
1025 check_commands = ap->
1026 link.sactive;
1027 }
1022 1028
1023 /** Check CPBs for completed commands */ 1029 /** Check CPBs for completed commands */
1024 while ((pos = ffs(check_commands)) && !error) { 1030 while ((pos = ffs(check_commands)) && !error) {