1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-03 12:35:02 +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 ? */
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);
}
}