nfe(4) for nVidia GigE
dillon at apollo.backplane.com
Sat Aug 26 13:47:40 PDT 2006
: I found one problem, but I don't know if it will fix the TX watchdog
: nfe_encap() is totally broken. It is setting each ring segment to
: NFE_TX_VALID as it goes, before it finishes writing out all the segments.
: In fact, it seems to be setting NFE_TX_VALID before it sets the LASTFRAG
: flag! It's amazing that it works at all.
: I am going to try to fix it.
Ok, there are two issues. The first issue is that NFE_TX_VALID is
being set too early in nfe_encap(). The second issue I found from
browsing OpenBSD/NetBSD postings on the subject. It appears that
sometimes the device simply does not generate an interrupt on TX
completion. Nobody seems to know why.
I have put the updated NFE driver code here. There are two changes.
First, I fix the NFE_TX_VALID issue. Second, I poll for transmit
completion in the watchdog timeout and don't reset the interface if
it finds transmit packets to retire.
Sephe, please integrate both tiem with your serializer changes. The
above archive is based on my original modified driver, not the one
where you fixed the jumbo packet serialization.
Also for some reason the NFE interface interferes with my 3ware card
(twa). Both are on IRQ 10. Both work most of the time, but sometimes
the NFE interface causes an interrupt from the 3ware to be lost. I
have no idea why this happens but I'm guessing it is motherboard related.
Turning on emergency interrupt polling (kern.emergency_intr_enable)
and leaving the emergency polling frequency at 10hz seems to solve
that problem. It's a terrible hack but it works.
<dillon at xxxxxxxxxxxxx>
More information about the Submit