declance: Restore tx descriptor ring locking
authorMaciej W. Rozycki <macro@linux-mips.org>
Mon, 8 Jun 2009 09:42:35 +0000 (02:42 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 8 Jun 2009 09:42:35 +0000 (02:42 -0700)
commit963267bc5d4de4a0da104a64300375d186575332
treed8d3522224e2778f69d4294ed9f1dc5e9b0359ad
parentfe93299a008a7056fe1790744b3a425ddf79a16b
declance: Restore tx descriptor ring locking

A driver overhaul on 29 Feb 2000 (!) broke locking around fiddling with
the tx descriptor ring in start_xmit(); a follow-on "fix" removed the
broken remnants altogether.  Here's a patch to restore proper locking in
the function -- the complement in the interrupt handler has been correct
all the time.

 This *may* have been the reason for the occasional confusion of the chip
-- triggering a tx timeout followed by a chip reset sequence -- seen on
R4k-based DECstations with the onboard Ethernet interface.  Another theory
is the confusion is due to an unindentified problem -- perhaps a silicon
erratum -- associated with the variation of the MT ASIC used to interface
the R4k CPU to the rest of the system on these computers; with its
aggressive write-back buffering the design is particularly weakly ordered
when it comes to MMIO (in the absence of ordering barriers uncached reads
are allowed to bypass earlier uncached writes, even if to the same
location), which may trigger all kinds of corner cases in peripheral
hardware as well as software.

Either way this piece of code is buggy.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/declance.c