diff options
author | David S. Miller <davem@davemloft.net> | 2014-08-30 00:07:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-01 20:39:55 -0400 |
commit | 10b3ad8c21bb4b135768c30dd4c51a1c744da699 (patch) | |
tree | 02acb0d328818c9216c93b6b46d62717e09cdc61 /net/core | |
parent | dace1b54726bffe1c009f7661e3cee6b762f30c8 (diff) |
net: Do txq_trans_update() in netdev_start_xmit()
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>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 7 | ||||
-rw-r--r-- | net/core/netpoll.c | 4 | ||||
-rw-r--r-- | net/core/pktgen.c | 3 |
3 files changed, 4 insertions, 10 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index a6077ef56345..6392adaaa22f 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2666,10 +2666,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, | |||
2666 | 2666 | ||
2667 | skb_len = skb->len; | 2667 | skb_len = skb->len; |
2668 | trace_net_dev_start_xmit(skb, dev); | 2668 | trace_net_dev_start_xmit(skb, dev); |
2669 | rc = netdev_start_xmit(skb, dev); | 2669 | rc = netdev_start_xmit(skb, dev, txq); |
2670 | trace_net_dev_xmit(skb, rc, dev, skb_len); | 2670 | trace_net_dev_xmit(skb, rc, dev, skb_len); |
2671 | if (rc == NETDEV_TX_OK) | ||
2672 | txq_trans_update(txq); | ||
2673 | return rc; | 2671 | return rc; |
2674 | } | 2672 | } |
2675 | 2673 | ||
@@ -2685,7 +2683,7 @@ gso: | |||
2685 | 2683 | ||
2686 | skb_len = nskb->len; | 2684 | skb_len = nskb->len; |
2687 | trace_net_dev_start_xmit(nskb, dev); | 2685 | trace_net_dev_start_xmit(nskb, dev); |
2688 | rc = netdev_start_xmit(nskb, dev); | 2686 | rc = netdev_start_xmit(nskb, dev, txq); |
2689 | trace_net_dev_xmit(nskb, rc, dev, skb_len); | 2687 | trace_net_dev_xmit(nskb, rc, dev, skb_len); |
2690 | if (unlikely(rc != NETDEV_TX_OK)) { | 2688 | if (unlikely(rc != NETDEV_TX_OK)) { |
2691 | if (rc & ~NETDEV_TX_MASK) | 2689 | if (rc & ~NETDEV_TX_MASK) |
@@ -2694,7 +2692,6 @@ gso: | |||
2694 | skb->next = nskb; | 2692 | skb->next = nskb; |
2695 | return rc; | 2693 | return rc; |
2696 | } | 2694 | } |
2697 | txq_trans_update(txq); | ||
2698 | if (unlikely(netif_xmit_stopped(txq) && skb->next)) | 2695 | if (unlikely(netif_xmit_stopped(txq) && skb->next)) |
2699 | return NETDEV_TX_BUSY; | 2696 | return NETDEV_TX_BUSY; |
2700 | } while (skb->next); | 2697 | } while (skb->next); |
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 12b1df976562..05bc57edaa81 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -91,9 +91,7 @@ static int netpoll_start_xmit(struct sk_buff *skb, struct net_device *dev, | |||
91 | skb->vlan_tci = 0; | 91 | skb->vlan_tci = 0; |
92 | } | 92 | } |
93 | 93 | ||
94 | status = netdev_start_xmit(skb, dev); | 94 | status = netdev_start_xmit(skb, dev, txq); |
95 | if (status == NETDEV_TX_OK) | ||
96 | txq_trans_update(txq); | ||
97 | 95 | ||
98 | out: | 96 | out: |
99 | return status; | 97 | return status; |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index d81b540096c3..34bd2ff9f121 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3335,11 +3335,10 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev) | |||
3335 | goto unlock; | 3335 | goto unlock; |
3336 | } | 3336 | } |
3337 | atomic_inc(&(pkt_dev->skb->users)); | 3337 | atomic_inc(&(pkt_dev->skb->users)); |
3338 | ret = netdev_start_xmit(pkt_dev->skb, odev); | 3338 | ret = netdev_start_xmit(pkt_dev->skb, odev, txq); |
3339 | 3339 | ||
3340 | switch (ret) { | 3340 | switch (ret) { |
3341 | case NETDEV_TX_OK: | 3341 | case NETDEV_TX_OK: |
3342 | txq_trans_update(txq); | ||
3343 | pkt_dev->last_ok = 1; | 3342 | pkt_dev->last_ok = 1; |
3344 | pkt_dev->sofar++; | 3343 | pkt_dev->sofar++; |
3345 | pkt_dev->seq_num++; | 3344 | pkt_dev->seq_num++; |