mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-14 10:09:48 +00:00
Do not ignore device interrupt if bus mastering is still active. It is
normal in case of media read error and some ATAPI cases, when transfer size is unknown beforehand. PCI ATA BM specification tells that in case of such underrun driver should just manually stop DMA engine. DMA engine should same time guarantie that all bus mastering transfers completed at the moment of driver reads interrupt flag asserted. This change should fix interrupt storms and command timeouts in many cases. PR: kern/103602, sparc64/121539, kern/133122, kern/139654
This commit is contained in:
parent
023c421a96
commit
ff09f97fb4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=200121
@ -462,8 +462,7 @@ ata_pci_status(device_t dev)
|
||||
(ch->dma.flags & ATA_DMA_ACTIVE))) {
|
||||
int bmstat = ATA_IDX_INB(ch, ATA_BMSTAT_PORT) & ATA_BMSTAT_MASK;
|
||||
|
||||
if ((bmstat & (ATA_BMSTAT_ACTIVE | ATA_BMSTAT_INTERRUPT)) !=
|
||||
ATA_BMSTAT_INTERRUPT)
|
||||
if ((bmstat & ATA_BMSTAT_INTERRUPT) == 0)
|
||||
return 0;
|
||||
ATA_IDX_OUTB(ch, ATA_BMSTAT_PORT, bmstat & ~ATA_BMSTAT_ERROR);
|
||||
DELAY(1);
|
||||
|
Loading…
Reference in New Issue
Block a user