Skip to content

Commit df133f3

Browse files
mstsirkindavem330
authored andcommitted
virtio_net: bulk free tx skbs
Use napi_consume_skb() to get bulk free. Note that napi_consume_skb is safe to call in a non-napi context as long as the napi_budget flag is correct. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 3e64cf7 commit df133f3

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

drivers/net/virtio_net.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,7 +1330,7 @@ static int virtnet_receive(struct receive_queue *rq, int budget,
13301330
return stats.packets;
13311331
}
13321332

1333-
static void free_old_xmit_skbs(struct send_queue *sq)
1333+
static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi)
13341334
{
13351335
struct sk_buff *skb;
13361336
unsigned int len;
@@ -1343,7 +1343,7 @@ static void free_old_xmit_skbs(struct send_queue *sq)
13431343
bytes += skb->len;
13441344
packets++;
13451345

1346-
dev_consume_skb_any(skb);
1346+
napi_consume_skb(skb, in_napi);
13471347
}
13481348

13491349
/* Avoid overhead when no packets have been processed
@@ -1369,7 +1369,7 @@ static void virtnet_poll_cleantx(struct receive_queue *rq)
13691369
return;
13701370

13711371
if (__netif_tx_trylock(txq)) {
1372-
free_old_xmit_skbs(sq);
1372+
free_old_xmit_skbs(sq, true);
13731373
__netif_tx_unlock(txq);
13741374
}
13751375

@@ -1445,7 +1445,7 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget)
14451445
struct netdev_queue *txq = netdev_get_tx_queue(vi->dev, vq2txq(sq->vq));
14461446

14471447
__netif_tx_lock(txq, raw_smp_processor_id());
1448-
free_old_xmit_skbs(sq);
1448+
free_old_xmit_skbs(sq, true);
14491449
__netif_tx_unlock(txq);
14501450

14511451
virtqueue_napi_complete(napi, sq->vq, 0);
@@ -1514,7 +1514,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
15141514
bool use_napi = sq->napi.weight;
15151515

15161516
/* Free up any pending old buffers before queueing new ones. */
1517-
free_old_xmit_skbs(sq);
1517+
free_old_xmit_skbs(sq, false);
15181518

15191519
if (use_napi && kick)
15201520
virtqueue_enable_cb_delayed(sq->vq);
@@ -1557,7 +1557,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
15571557
if (!use_napi &&
15581558
unlikely(!virtqueue_enable_cb_delayed(sq->vq))) {
15591559
/* More just got used, free them then recheck. */
1560-
free_old_xmit_skbs(sq);
1560+
free_old_xmit_skbs(sq, false);
15611561
if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) {
15621562
netif_start_subqueue(dev, qnum);
15631563
virtqueue_disable_cb(sq->vq);

0 commit comments

Comments
 (0)