The patch virtio_net: limit xmit polling got the logic reversed: it polled while we had capacity not while ring was empty. Fix it up and clean up a bit by using a for loop. Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> --- OK, turns out that patch was borken. Here's a fix that survived stress test on my box. Pushed on my branch, I'll send a rebased series with Rusty's comments addressed ASAP. drivers/net/virtio_net.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 9982bd7..c8cd22d 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -514,12 +514,14 @@ static bool free_old_xmit_skbs(struct virtnet_info *vi, int capacity) struct sk_buff *skb; unsigned int len; bool c; + int n; + /* We try to free up at least 2 skbs per one sent, so that we'll get * all of the memory back if they are used fast enough. */ - int n = 2; - - while ((c = virtqueue_get_capacity(vi->svq) >= capacity) && --n > 0 && - (skb = virtqueue_get_buf(vi->svq, &len)) != NULL) { + for (n = 0; + ((c = virtqueue_get_capacity(vi->svq)) < capacity || n < 2) && + ((skb = virtqueue_get_buf(vi->svq, &len))); + ++n) { pr_debug("Sent skb %p\n", skb); vi->dev->stats.tx_bytes += skb->len; vi->dev->stats.tx_packets++; -- 1.7.5.53.gc233e -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html