identify sockaddr_dl abuse that remains in the kernel, especially
the potential for overwriting memory past the end of a sockaddr_dl
with, e.g., memcpy(LLADDR(), ...).
Reenable statistics interrupts, reading it as 16bit caused it to not be cleared,and thus the eventual interrupt to not be cleared (and this caused an
infinite loop in interrupt routine).
While I'm there count STE_CarrierSenseErrors as oerror (this is incremented
each time we try to send a packet and the link is down).
- when a transmit underrun occurs, only reset the transmit logic. This prevents
the link from going down at the MII level (the same logic can probably
be used for other transmit errors)
- set the urgent threshold to half the start threshold. From experiments
this helps a bit decreasing the number of underruns
Now that underruns don't cause the interface to stop for several seconds,
make back out the default transmit threshold to 128.
cause the link to go down for several seconds on my Dlink DFE580-TX (quad-port
DL1002). This behavior is unacceptable, especially as the driver usually
gets several underrun at once, causing the link to be almost unaviable
for several 10s of seconds.
Bump the default transmit threshold to 1504 bytes to avoid transmit underrun.
is down cause the chip to create an IE_UpdateStats condition which can't be
cleared, causing the driver to enter an interrupt loop.
Workaround: mask IE_UpdateStats