net: Do txq_trans_update() in netdev_start_xmit()
authorDavid S. Miller <davem@davemloft.net>
Sat, 30 Aug 2014 04:07:24 +0000 (21:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Sep 2014 00:39:55 +0000 (17:39 -0700)
That way we don't have to audit every call site to make sure it is
doing this properly.

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wan/dlci.c
include/linux/netdevice.h
net/core/dev.c
net/core/netpoll.c
net/core/pktgen.c
net/packet/af_packet.c
net/sched/sch_teql.c

index 81b22a180aad379562d62b9376e2010905591518..6427e828341959b9a3ee4a6fe4354c74d3277375 100644 (file)
@@ -192,8 +192,10 @@ static netdev_tx_t dlci_transmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct dlci_local *dlp = netdev_priv(dev);
 
-       if (skb)
-               netdev_start_xmit(skb, dlp->slave);
+       if (skb) {
+               struct netdev_queue *txq = skb_get_tx_queue(dev, skb);
+               netdev_start_xmit(skb, dlp->slave, txq);
+       }
        return NETDEV_TX_OK;
 }
 
index 456eb1fe51e84eeba857330070512b57cfdcd596..16171802ea7d1ba9628c4fdfe62a6ad5ebd25df5 100644 (file)
@@ -3437,11 +3437,17 @@ static inline netdev_tx_t __netdev_start_xmit(const struct net_device_ops *ops,
        return ops->ndo_start_xmit(skb, dev);
 }
 
-static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev,
+                                           struct netdev_queue *txq)
 {
        const struct net_device_ops *ops = dev->netdev_ops;
+       int rc;
 
-       return __netdev_start_xmit(ops, skb, dev);
+       rc = __netdev_start_xmit(ops, skb, dev);
+       if (rc == NETDEV_TX_OK)
+               txq_trans_update(txq);
+
+       return rc;
 }
 
 int netdev_class_create_file_ns(struct class_attribute *class_attr,
index a6077ef563458ccaefd21c406c8da467b556236e..6392adaaa22f8e0c355e7d85a2c990b95e25a441 100644 (file)
@@ -2666,10 +2666,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
 
                skb_len = skb->len;
                trace_net_dev_start_xmit(skb, dev);
-               rc = netdev_start_xmit(skb, dev);
+               rc = netdev_start_xmit(skb, dev, txq);
                trace_net_dev_xmit(skb, rc, dev, skb_len);
-               if (rc == NETDEV_TX_OK)
-                       txq_trans_update(txq);
                return rc;
        }
 
@@ -2685,7 +2683,7 @@ gso:
 
                skb_len = nskb->len;
                trace_net_dev_start_xmit(nskb, dev);
-               rc = netdev_start_xmit(nskb, dev);
+               rc = netdev_start_xmit(nskb, dev, txq);
                trace_net_dev_xmit(nskb, rc, dev, skb_len);
                if (unlikely(rc != NETDEV_TX_OK)) {
                        if (rc & ~NETDEV_TX_MASK)
@@ -2694,7 +2692,6 @@ gso:
                        skb->next = nskb;
                        return rc;
                }
-               txq_trans_update(txq);
                if (unlikely(netif_xmit_stopped(txq) && skb->next))
                        return NETDEV_TX_BUSY;
        } while (skb->next);
index 12b1df9765624d8effa51e7e0284a5b5fd877527..05bc57edaa81bd35cb7f9c7ac533168f9f00e0fa 100644 (file)
@@ -91,9 +91,7 @@ static int netpoll_start_xmit(struct sk_buff *skb, struct net_device *dev,
                skb->vlan_tci = 0;
        }
 
-       status = netdev_start_xmit(skb, dev);
-       if (status == NETDEV_TX_OK)
-               txq_trans_update(txq);
+       status = netdev_start_xmit(skb, dev, txq);
 
 out:
        return status;
index d81b540096c36fc718c22b07a92f193927e4abc0..34bd2ff9f1219394d3556712681b8cc257b76c8e 100644 (file)
@@ -3335,11 +3335,10 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
                goto unlock;
        }
        atomic_inc(&(pkt_dev->skb->users));
-       ret = netdev_start_xmit(pkt_dev->skb, odev);
+       ret = netdev_start_xmit(pkt_dev->skb, odev, txq);
 
        switch (ret) {
        case NETDEV_TX_OK:
-               txq_trans_update(txq);
                pkt_dev->last_ok = 1;
                pkt_dev->sofar++;
                pkt_dev->seq_num++;
index b7a7f5a721bddae6fc56231e184558cbb6bc6906..fe305a05a8fc4a15edc4688453209de7a55a8f95 100644 (file)
@@ -258,11 +258,8 @@ static int packet_direct_xmit(struct sk_buff *skb)
        local_bh_disable();
 
        HARD_TX_LOCK(dev, txq, smp_processor_id());
-       if (!netif_xmit_frozen_or_drv_stopped(txq)) {
-               ret = netdev_start_xmit(skb, dev);
-               if (ret == NETDEV_TX_OK)
-                       txq_trans_update(txq);
-       }
+       if (!netif_xmit_frozen_or_drv_stopped(txq))
+               ret = netdev_start_xmit(skb, dev, txq);
        HARD_TX_UNLOCK(dev, txq);
 
        local_bh_enable();
index 64cd93ca810423657b7e9e550401f6f41c4a2f33..193dc2cba1ec5a71d4a62da432fd470e3a31c8a6 100644 (file)
@@ -316,8 +316,7 @@ restart:
                                unsigned int length = qdisc_pkt_len(skb);
 
                                if (!netif_xmit_frozen_or_stopped(slave_txq) &&
-                                   netdev_start_xmit(skb, slave) == NETDEV_TX_OK) {
-                                       txq_trans_update(slave_txq);
+                                   netdev_start_xmit(skb, slave, slave_txq) == NETDEV_TX_OK) {
                                        __netif_tx_unlock(slave_txq);
                                        master->slaves = NEXT_SLAVE(q);
                                        netif_wake_queue(dev);