dillon at apollo.backplane.com
Fri May 11 12:50:08 PDT 2007
:The strange thing is I was rebooting my laptop (via icewm) when this
:occurred. The interface is re(4) according to the kernel buffer output
I'm guessing there's an issue with re_init() or re_stop() that is
possibly being triggered by setting the IP address.
re_init() for the RE interface looks like is doing some dangerous
things... if there is DMA still operating while it is trying to
reinitialize the device, that could be causing the NMI. It seems to be
writing 0x00 to the command register which I guess is supposed to stop
device operation, but it is not waiting for the device to actually stop
operating before it begins to free the TX and RX rings.
Most network controllers these days are actually microcontrollers,
which means that commands do not instantaniously take effect when
you write to the command register. Usually only the interrupt
control registers are hardwired.
I got two questions. First, when you ifconfig the interface with a
new IP address does it normally pause before returning? That would
indicate that is is in fact doing a full device reset when configuring
an IP address. Second, can you reproduce the problem? Perhaps by
re-configuring the device's IP address over and over again in a loop?
We may be able to 'fix' the problem simply by introducing a delay
after writing 0x00 to RE_COMMAND, or by calling re_reset() as part
of re_stop(), but I'd like a way to verify that doing so will actually
fix the problem.
<dillon at backplane.com>
More information about the Bugs