]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
tg3: Add memory barriers to sync BD data
authorJoe Jin <joe.jin@oracle.com>
Mon, 27 Aug 2012 05:26:13 +0000 (13:26 +0800)
committerJoe Jin <joe.jin@oracle.com>
Tue, 28 Aug 2012 07:23:06 +0000 (15:23 +0800)
for weak memory model architectures to ensure that the chip will DMA
valid BD data.

(cherry picked from commit 6541b806b5f267eda8f127bb7f5fec4e7e4db995)
Signed-off-by: Michael Chan <mchan@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Reviewed-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/tg3.c

index 68319889747642577adf9a875204e9e65c735d2e..65ad7fd66194bbde2e638e38d8a5efe6ad25278f 100644 (file)
@@ -5921,6 +5921,9 @@ next_pkt_nopost:
 
        /* Refill RX ring(s). */
        if (!tg3_flag(tp, ENABLE_RSS)) {
+               /* Sync BD data before updating mailbox */
+               wmb();
+
                if (work_mask & RXD_OPAQUE_RING_STD) {
                        tpr->rx_std_prod_idx = std_prod_idx &
                                               tp->rx_std_ring_mask;
@@ -6972,6 +6975,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
                        goto drop_nofree;
        }
 
+       /* Sync BD data before updating mailbox */
+       wmb();
+
        /* Packets are ready, update Tx producer idx local and on card. */
        tw32_tx_mbox(tnapi->prodmbox, entry);
 
@@ -11772,6 +11778,9 @@ static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
 
        tnapi->tx_prod++;
 
+       /* Sync BD data before updating mailbox */
+       wmb();
+
        tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
        tr32_mailbox(tnapi->prodmbox);