1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-20 15:43:16 +00:00

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>
This commit is contained in:
Gary Jennejohn 2002-04-23 10:25:35 +00:00
parent dcd88dc271
commit bb83e7583e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=95308

View File

@ -974,18 +974,25 @@ avma1pp2_intr(void *xsc)
/* was there an interrupt from this card ? */ /* was there an interrupt from this card ? */
if ((stat & ASL_IRQ_Pending) == 0) if ((stat & ASL_IRQ_Pending) == 0)
return; /* no */ return; /* no */
/* interrupts are high active */ /* For slow machines loop as long as an interrupt is active */
if (stat & ASL_IRQ_TIMER) for (; ((stat & ASL_IRQ_Pending) != 0) ;)
NDBGL1(L1_H_IRQ, "timer interrupt ???");
if (stat & ASL_IRQ_HSCX)
{ {
NDBGL1(L1_H_IRQ, "HSCX"); /* interrupts are high active */
avma1pp2_hscx_int_handler(sc); if (stat & ASL_IRQ_TIMER)
} NDBGL1(L1_H_IRQ, "timer interrupt ???");
if (stat & ASL_IRQ_ISAC) if (stat & ASL_IRQ_HSCX)
{ {
NDBGL1(L1_H_IRQ, "ISAC"); NDBGL1(L1_H_IRQ, "HSCX");
ifpi2_isacsx_intr(sc); 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);
} }
} }