summaryrefslogtreecommitdiff
path: root/drivers/net/tulip/de2104x.c
diff options
context:
space:
mode:
authorRisto Suominen <Risto.Suominen@gmail.com>2009-02-09 04:50:34 +0300
committerDavid S. Miller <davem@davemloft.net>2009-02-09 04:50:34 +0300
commitb991d2bc4a6e1821555bdc2a682f9aed24650c98 (patch)
tree4e02f61d5525d4191ab9fa208377d45d21ae7fe2 /drivers/net/tulip/de2104x.c
parentcfbf84fcbcda98bb91ada683a8dc8e6901a83ebd (diff)
downloadlinux-b991d2bc4a6e1821555bdc2a682f9aed24650c98.tar.xz
de2104x: force correct order when writing to rx ring
DescOwn should not be set, thus allowing the chip to use the descriptor, before everything else is set up correctly. Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tulip/de2104x.c')
-rw-r--r--drivers/net/tulip/de2104x.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c
index 0bf2114738be..d4c5ecc51f77 100644
--- a/drivers/net/tulip/de2104x.c
+++ b/drivers/net/tulip/de2104x.c
@@ -464,13 +464,14 @@ static void de_rx (struct de_private *de)
drop = 1;
rx_next:
- de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
if (rx_tail == (DE_RX_RING_SIZE - 1))
de->rx_ring[rx_tail].opts2 =
cpu_to_le32(RingEnd | de->rx_buf_sz);
else
de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
+ wmb();
+ de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
rx_tail = NEXT_RX(rx_tail);
}