pktgen: Avoid dirtying skb->users when txq is full
We can avoid two atomic ops on skb->users if packet is not going to be sent to the device (because hardware txqueue is full) Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Acked-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b3a5b6cc7c
commit
0835acfe72
1 changed files with 7 additions and 4 deletions
|
@ -3441,12 +3441,14 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
|
|||
txq = netdev_get_tx_queue(odev, queue_map);
|
||||
|
||||
__netif_tx_lock_bh(txq);
|
||||
atomic_inc(&(pkt_dev->skb->users));
|
||||
|
||||
if (unlikely(netif_tx_queue_stopped(txq) || netif_tx_queue_frozen(txq)))
|
||||
if (unlikely(netif_tx_queue_stopped(txq) || netif_tx_queue_frozen(txq))) {
|
||||
ret = NETDEV_TX_BUSY;
|
||||
else
|
||||
ret = (*xmit)(pkt_dev->skb, odev);
|
||||
pkt_dev->last_ok = 0;
|
||||
goto unlock;
|
||||
}
|
||||
atomic_inc(&(pkt_dev->skb->users));
|
||||
ret = (*xmit)(pkt_dev->skb, odev);
|
||||
|
||||
switch (ret) {
|
||||
case NETDEV_TX_OK:
|
||||
|
@ -3468,6 +3470,7 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
|
|||
atomic_dec(&(pkt_dev->skb->users));
|
||||
pkt_dev->last_ok = 0;
|
||||
}
|
||||
unlock:
|
||||
__netif_tx_unlock_bh(txq);
|
||||
|
||||
/* If pkt_dev->count is zero, then run forever */
|
||||
|
|
Loading…
Reference in a new issue