|
@@ -557,10 +557,10 @@ again:
|
|
|
return received;
|
|
|
}
|
|
|
|
|
|
-static unsigned int free_old_xmit_skbs(struct virtnet_info *vi)
|
|
|
+static void free_old_xmit_skbs(struct virtnet_info *vi)
|
|
|
{
|
|
|
struct sk_buff *skb;
|
|
|
- unsigned int len, tot_sgs = 0;
|
|
|
+ unsigned int len;
|
|
|
struct virtnet_stats *stats = this_cpu_ptr(vi->stats);
|
|
|
|
|
|
while ((skb = virtqueue_get_buf(vi->svq, &len)) != NULL) {
|
|
@@ -571,10 +571,8 @@ static unsigned int free_old_xmit_skbs(struct virtnet_info *vi)
|
|
|
stats->tx_packets++;
|
|
|
u64_stats_update_end(&stats->tx_syncp);
|
|
|
|
|
|
- tot_sgs += skb_vnet_hdr(skb)->num_sg;
|
|
|
dev_kfree_skb_any(skb);
|
|
|
}
|
|
|
- return tot_sgs;
|
|
|
}
|
|
|
|
|
|
static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
|
|
@@ -664,7 +662,8 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
netif_stop_queue(dev);
|
|
|
if (unlikely(!virtqueue_enable_cb_delayed(vi->svq))) {
|
|
|
/* More just got used, free them then recheck. */
|
|
|
- capacity += free_old_xmit_skbs(vi);
|
|
|
+ free_old_xmit_skbs(vi);
|
|
|
+ capacity = vi->svq->num_free;
|
|
|
if (capacity >= 2+MAX_SKB_FRAGS) {
|
|
|
netif_start_queue(dev);
|
|
|
virtqueue_disable_cb(vi->svq);
|