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:
parent
dcd88dc271
commit
bb83e7583e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=95308
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user