diff mbox

[001/002] de2104x: force correct order when writing to rx ring

Message ID 46e1c7760902082327w38719aa9j97e7158b045bc0f9@mail.gmail.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Risto Suominen Feb. 9, 2009, 7:27 a.m. UTC
---------- Forwarded message ----------
From: Risto Suominen <risto.suominen@gmail.com>
Date: 2009/2/7
Subject: [PATCH 001/002] de2104x: force correct order when writing to rx ring
To: Jeff Garzik <jgarzik@pobox.com>, lkml <linux-kernel@vger.kernel.org>


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>
---
The testing is done on kernel version 2.6.18.
diff mbox

Patch

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>
---
The testing is done on kernel version 2.6.18.

--- drivers/net/tulip/de2104x.c.org	2006-09-20 06:42:06.000000000 +0300
+++ drivers/net/tulip/de2104x.c	2009-02-07 15:04:04.000000000 +0200
@@ -465,13 +465,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);
 	}