diff options
| -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) { |
