tnapi->tx_cons = sw_idx;
 
-       /* Need to make the tx_cons update visible to tg3_start_xmit()
+       /* Need to make the tx_cons update visible to __tg3_start_xmit()
         * before checking for netif_queue_stopped().  Without the
-        * memory barrier, there is a small possibility that tg3_start_xmit()
+        * memory barrier, there is a small possibility that __tg3_start_xmit()
         * will miss it and cause the queue to be stopped forever.
         */
        smp_mb();
        return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
 }
 
-static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
+static netdev_tx_t __tg3_start_xmit(struct sk_buff *, struct net_device *);
 
 /* Use GSO to workaround all TSO packets that meet HW bug conditions
  * indicated in tg3_tx_frag_set()
 
        skb_list_walk_safe(segs, seg, next) {
                skb_mark_not_on_list(seg);
-               tg3_start_xmit(seg, tp->dev);
+               __tg3_start_xmit(seg, tp->dev);
        }
 
 tg3_tso_bug_end:
 }
 
 /* hard_start_xmit for all devices */
-static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t __tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct tg3 *tp = netdev_priv(dev);
        u32 len, entry, base_flags, mss, vlan = 0;
                        netif_tx_wake_queue(txq);
        }
 
-       if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
-               /* Packets are ready, update Tx producer idx on card. */
-               tw32_tx_mbox(tnapi->prodmbox, entry);
-       }
-
        return NETDEV_TX_OK;
 
 dma_error:
        return NETDEV_TX_OK;
 }
 
+static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+       struct netdev_queue *txq;
+       u16 skb_queue_mapping;
+       netdev_tx_t ret;
+
+       skb_queue_mapping = skb_get_queue_mapping(skb);
+       txq = netdev_get_tx_queue(dev, skb_queue_mapping);
+
+       ret = __tg3_start_xmit(skb, dev);
+
+       /* Notify the hardware that packets are ready by updating the TX ring
+        * tail pointer. We respect netdev_xmit_more() thus avoiding poking
+        * the hardware for every packet. To guarantee forward progress the TX
+        * ring must be drained when it is full as indicated by
+        * netif_xmit_stopped(). This needs to happen even when the current
+        * skb was dropped or rejected with NETDEV_TX_BUSY. Otherwise packets
+        * queued by previous __tg3_start_xmit() calls might get stuck in
+        * the queue forever.
+        */
+       if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
+               struct tg3_napi *tnapi;
+               struct tg3 *tp;
+
+               tp = netdev_priv(dev);
+               tnapi = &tp->napi[skb_queue_mapping];
+
+               if (tg3_flag(tp, ENABLE_TSS))
+                       tnapi++;
+
+               tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
+       }
+
+       return ret;
+}
+
 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
 {
        if (enable) {
         * device behind the EPB cannot support DMA addresses > 40-bit.
         * On 64-bit systems with IOMMU, use 40-bit dma_mask.
         * On 64-bit systems without IOMMU, use 64-bit dma_mask and
-        * do DMA address check in tg3_start_xmit().
+        * do DMA address check in __tg3_start_xmit().
         */
        if (tg3_flag(tp, IS_5788))
                persist_dma_mask = dma_mask = DMA_BIT_MASK(32);