Subject: Interrupts - soft, hard, and missing
To: None <port-macppc@netbsd.org>
From: Donald Lee <donlee_ppc@icompute.com>
List: port-macppc
Date: 01/04/2001 00:33:02
Dear list,
My status:
Running NetBSD 1.5 release with patches:
sys/arch/macppc/macppc/extintr.c
mod to change handling of ipending to not
clear newly-set pending soft ints.
(ftp://ftp.icompute.com/pub/donlee/extintr.c.ok)
Problem fixed: PPP latency/delay
sys/dev/ic/cy.c
Mod to check the CD1400 status register
in cy_poll() and call cy_intr() "manually"
if interrupts should have happened but the
interrupt handler did not get invoked.
also, loop in cy_intr() for "clean" trip before exit.
(ftp://ftp.icompute.com/pub/donlee/cy.c.ok)
Also logs this event once for each 128 times it
happens...
Problem fixed: Cyclades 8Y driver does not
work.
Note: The "fix" in the cyclades driver is actually a massive kludge.
I believe that there is still a problem in the interrupt code that is
dropping newly-occurring interrupts if they occur while interrupts are
masked/disabled. Without the "manual" call to cy_intr(), the driver
locks up hard, with the interrupt status bits in the CD1400 chip set, and
the handler never gets called. New interrupts generated by the card
are completely ignored. It appears that the interrupt hardware is "edge
triggered, and once you miss one, that's it.
-dgl-