diff -ruN linux-2.6-2.6.32.orig/drivers/net/r8169.c linux-2.6-2.6.32/drivers/net/r8169.c
--- linux-2.6-2.6.32.orig/drivers/net/r8169.c	2009-12-03 09:46:17.000000000 +0200
+++ linux-2.6-2.6.32/drivers/net/r8169.c	2010-06-10 13:56:50.000000000 +0300
@@ -2164,8 +2164,8 @@
 	spin_lock_irq(&tp->lock);
 
 	RTL_W8(Cfg9346, Cfg9346_Unlock);
-	RTL_W32(MAC0, low);
 	RTL_W32(MAC4, high);
+	RTL_W32(MAC0, low);
 	RTL_W8(Cfg9346, Cfg9346_Lock);
 
 	spin_unlock_irq(&tp->lock);
@@ -3634,7 +3634,7 @@
 
 	tp->cur_tx += frags + 1;
 
-	smp_wmb();
+	wmb();
 
 	RTL_W8(TxPoll, NPQ);	/* set polling bit */
 
@@ -3994,7 +3994,7 @@
 		 * until it does.
 		 */
 		tp->intr_mask = 0xffff;
-		smp_wmb();
+		wmb();
 		RTL_W16(IntrMask, tp->intr_event);
 	}
 
@@ -4132,8 +4132,8 @@
 		mc_filter[1] = swab32(data);
 	}
 
-	RTL_W32(MAR0 + 0, mc_filter[0]);
 	RTL_W32(MAR0 + 4, mc_filter[1]);
+	RTL_W32(MAR0 + 0, mc_filter[0]);
 
 	RTL_W32(RxConfig, tmp);
 
