diff options
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/sata_nv.c | 18 |
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) { |