Michael S. Tsirkin
2011-May-18 22:01 UTC
[PATCH RFC] virtio_net: fix patch: virtio_net: limit xmit polling
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 at redhat.com> --- 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
Rusty Russell
2011-May-19 07:30 UTC
[PATCH RFC] virtio_net: fix patch: virtio_net: limit xmit polling
On Thu, 19 May 2011 01:01:25 +0300, "Michael S. Tsirkin" <mst at redhat.com> wrote:> 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 at redhat.com> > --- > > 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.Normally you would have missed the merge window by now, but I'd really like this stuff in, so I'm holding it open for this. I want these patches in linux-next for at least a few days before I push them. If you think we're not close enough, please tell me and I'll push the rest of the virtio patches to Linus now. Thanks, Rusty.
Maybe Matching Threads
- [PATCH RFC] virtio_net: fix patch: virtio_net: limit xmit polling
- [PATCH 3/4] virtio_net: don't free buffers in xmit ring
- [PATCH 3/4] virtio_net: don't free buffers in xmit ring
- [PATCHv2 00/14] virtio and vhost-net performance enhancements
- [PATCHv2 00/14] virtio and vhost-net performance enhancements