aboutsummaryrefslogtreecommitdiff
path: root/sys/i4b
diff options
context:
space:
mode:
authorGary Jennejohn <gj@FreeBSD.org>2002-04-23 10:25:35 +0000
committerGary Jennejohn <gj@FreeBSD.org>2002-04-23 10:25:35 +0000
commitbb83e7583e8d9bbe7e26b0eee30bfd2cc103c665 (patch)
treeedfbbb3d58d388ba62ee5144329dba61fbe88be9 /sys/i4b
parentdcd88dc27134f608d262dfb6e87680ecba23b05f (diff)
downloadsrc-bb83e7583e8d9bbe7e26b0eee30bfd2cc103c665.tar.gz
src-bb83e7583e8d9bbe7e26b0eee30bfd2cc103c665.zip
On slow machines interrupts could be lost, so check for pending
interrupts in a loop. Tested by: Andrew Gordon <arg-bsd@arg1.demon.co.uk>
Notes
Notes: svn path=/head/; revision=95308
Diffstat (limited to 'sys/i4b')
-rw-r--r--sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c b/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c
index 981473bc4c80..fc702317708b 100644
--- a/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c
+++ b/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c
@@ -974,18 +974,25 @@ avma1pp2_intr(void *xsc)
/* was there an interrupt from this card ? */
if ((stat & ASL_IRQ_Pending) == 0)
return; /* no */
- /* interrupts are high active */
- if (stat & ASL_IRQ_TIMER)
- NDBGL1(L1_H_IRQ, "timer interrupt ???");
- if (stat & ASL_IRQ_HSCX)
+ /* For slow machines loop as long as an interrupt is active */
+ for (; ((stat & ASL_IRQ_Pending) != 0) ;)
{
- NDBGL1(L1_H_IRQ, "HSCX");
- avma1pp2_hscx_int_handler(sc);
- }
- if (stat & ASL_IRQ_ISAC)
- {
- NDBGL1(L1_H_IRQ, "ISAC");
- ifpi2_isacsx_intr(sc);
+ /* interrupts are high active */
+ if (stat & ASL_IRQ_TIMER)
+ NDBGL1(L1_H_IRQ, "timer interrupt ???");
+ if (stat & ASL_IRQ_HSCX)
+ {
+ NDBGL1(L1_H_IRQ, "HSCX");
+ avma1pp2_hscx_int_handler(sc);
+ }
+ if (stat & ASL_IRQ_ISAC)
+ {
+ NDBGL1(L1_H_IRQ, "ISAC");
+ ifpi2_isacsx_intr(sc);
+ }
+ stat = bus_space_read_1(btag, bhandle, STAT0_OFFSET);
+ NDBGL1(L1_H_IRQ, "stat %x", stat);
+
}
}