kern/139654: commit references a PR
dfilter service
dfilter at FreeBSD.ORG
Sat Dec 5 13:50:08 UTC 2009
The following reply was made to PR kern/139654; it has been noted by GNATS.
From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/139654: commit references a PR
Date: Sat, 5 Dec 2009 13:41:06 +0000 (UTC)
Author: mav
Date: Sat Dec 5 13:40:51 2009
New Revision: 200121
URL: http://svn.freebsd.org/changeset/base/200121
Log:
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
Modified:
head/sys/dev/ata/ata-pci.c
Modified: head/sys/dev/ata/ata-pci.c
==============================================================================
--- head/sys/dev/ata/ata-pci.c Sat Dec 5 13:12:04 2009 (r200120)
+++ head/sys/dev/ata/ata-pci.c Sat Dec 5 13:40:51 2009 (r200121)
@@ -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);
_______________________________________________
svn-src-all at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-bugs
mailing list