diff options
author | Risto Suominen <Risto.Suominen@gmail.com> | 2009-02-08 17:50:34 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-02-08 17:50:34 -0800 |
commit | b991d2bc4a6e1821555bdc2a682f9aed24650c98 (patch) | |
tree | 4e02f61d5525d4191ab9fa208377d45d21ae7fe2 | |
parent | cfbf84fcbcda98bb91ada683a8dc8e6901a83ebd (diff) |
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>
-rw-r--r-- | drivers/net/tulip/de2104x.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c index 0bf2114738b..d4c5ecc51f7 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); } |