diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/ahci.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 6a3543e06241..334f54c99fd8 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -198,7 +198,6 @@ struct ahci_port_priv { | |||
198 | void *rx_fis; | 198 | void *rx_fis; |
199 | dma_addr_t rx_fis_dma; | 199 | dma_addr_t rx_fis_dma; |
200 | /* for NCQ spurious interrupt analysis */ | 200 | /* for NCQ spurious interrupt analysis */ |
201 | int ncq_saw_spurious_sdb_cnt; | ||
202 | unsigned int ncq_saw_d2h:1; | 201 | unsigned int ncq_saw_d2h:1; |
203 | unsigned int ncq_saw_dmas:1; | 202 | unsigned int ncq_saw_dmas:1; |
204 | }; | 203 | }; |
@@ -1160,23 +1159,24 @@ static void ahci_host_intr(struct ata_port *ap) | |||
1160 | known_irq = 1; | 1159 | known_irq = 1; |
1161 | } | 1160 | } |
1162 | 1161 | ||
1163 | if (status & PORT_IRQ_SDB_FIS && | 1162 | if (status & PORT_IRQ_SDB_FIS) { |
1164 | pp->ncq_saw_spurious_sdb_cnt < 10) { | ||
1165 | /* SDB FIS containing spurious completions might be | 1163 | /* SDB FIS containing spurious completions might be |
1166 | * dangerous, we need to know more about them. Print | 1164 | * dangerous, whine and fail commands with HSM |
1167 | * more of it. | 1165 | * violation. EH will turn off NCQ after several such |
1168 | */ | 1166 | * failures. |
1167 | */ | ||
1169 | const __le32 *f = pp->rx_fis + RX_FIS_SDB; | 1168 | const __le32 *f = pp->rx_fis + RX_FIS_SDB; |
1170 | 1169 | ||
1171 | ata_port_printk(ap, KERN_INFO, "Spurious SDB FIS during NCQ " | 1170 | ata_ehi_push_desc(ehi, "spurious completion during NCQ " |
1172 | "issue=0x%x SAct=0x%x FIS=%08x:%08x%s\n", | 1171 | "issue=0x%x SAct=0x%x FIS=%08x:%08x", |
1173 | readl(port_mmio + PORT_CMD_ISSUE), | 1172 | readl(port_mmio + PORT_CMD_ISSUE), |
1174 | readl(port_mmio + PORT_SCR_ACT), | 1173 | readl(port_mmio + PORT_SCR_ACT), |
1175 | le32_to_cpu(f[0]), le32_to_cpu(f[1]), | 1174 | le32_to_cpu(f[0]), le32_to_cpu(f[1])); |
1176 | pp->ncq_saw_spurious_sdb_cnt < 10 ? | 1175 | |
1177 | "" : ", shutting up"); | 1176 | ehi->err_mask |= AC_ERR_HSM; |
1177 | ehi->action |= ATA_EH_SOFTRESET; | ||
1178 | ata_port_freeze(ap); | ||
1178 | 1179 | ||
1179 | pp->ncq_saw_spurious_sdb_cnt++; | ||
1180 | known_irq = 1; | 1180 | known_irq = 1; |
1181 | } | 1181 | } |
1182 | 1182 | ||