Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0835acfe authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

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: default avatarEric Dumazet <eric.dumazet@gmail.com>
Acked-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b3a5b6cc
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -3441,11 +3441,13 @@ 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
		pkt_dev->last_ok = 0;
		goto unlock;
	}
	atomic_inc(&(pkt_dev->skb->users));
	ret = (*xmit)(pkt_dev->skb, odev);

	switch (ret) {
@@ -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 */