All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Shirley Ma <mashirle@us.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>, kvm@vger.kernel.org
Subject: Re: [PATCH 1/1 net-next] virtio_net: remove send queue
Date: Wed, 3 Feb 2010 12:03:29 +0200	[thread overview]
Message-ID: <20100203100300.GB3461@redhat.com> (raw)
In-Reply-To: <1265147331.672.20.camel@localhost.localdomain>

On Tue, Feb 02, 2010 at 01:48:51PM -0800, Shirley Ma wrote:
> Use detach buffers API in virtio to free unused buffers in send queue when shutting down 
> virtio_net to avoid maintaining skb link list for each transmit packet.
> 
> Signed-off-by: Shirley Ma <xma@us.ibm.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

> ---
>  drivers/net/virtio_net.c |   26 ++++++++------------------
>  1 files changed, 8 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 9d8984a..8069c08 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -56,9 +56,6 @@ struct virtnet_info
>  	/* Host will merge rx buffers for big packets (shake it! shake it!) */
>  	bool mergeable_rx_bufs;
>  
> -	/* Send queue. */
> -	struct sk_buff_head send;
> -
>  	/* Work struct for refilling if we run low on memory. */
>  	struct delayed_work refill;
>  
> @@ -505,7 +502,6 @@ static unsigned int free_old_xmit_skbs(struct virtnet_info *vi)
>  
>  	while ((skb = vi->svq->vq_ops->get_buf(vi->svq, &len)) != NULL) {
>  		pr_debug("Sent skb %p\n", skb);
> -		__skb_unlink(skb, &vi->send);
>  		vi->dev->stats.tx_bytes += skb->len;
>  		vi->dev->stats.tx_packets++;
>  		tot_sgs += skb_vnet_hdr(skb)->num_sg;
> @@ -588,15 +584,6 @@ again:
>  	}
>  	vi->svq->vq_ops->kick(vi->svq);
>  
> -	/*
> -	 * Put new one in send queue.  You'd expect we'd need this before
> -	 * xmit_skb calls add_buf(), since the callback can be triggered
> -	 * immediately after that.  But since the callback just triggers
> -	 * another call back here, normal network xmit locking prevents the
> -	 * race.
> -	 */
> -	__skb_queue_head(&vi->send, skb);
> -
>  	/* Don't wait up for transmitted skbs to be freed. */
>  	skb_orphan(skb);
>  	nf_reset(skb);
> @@ -977,9 +964,6 @@ static int virtnet_probe(struct virtio_device *vdev)
>  			dev->features |= NETIF_F_HW_VLAN_FILTER;
>  	}
>  
> -	/* Initialize our empty send queue. */
> -	skb_queue_head_init(&vi->send);
> -
>  	err = register_netdev(dev);
>  	if (err) {
>  		pr_debug("virtio_net: registering device failed\n");
> @@ -1016,6 +1000,12 @@ static void free_unused_bufs(struct virtnet_info *vi)
>  {
>  	void *buf;
>  	while (1) {
> +		buf = vi->svq->vq_ops->detach_unused_buf(vi->svq);
> +		if (!buf)
> +			break;
> +		dev_kfree_skb(buf);
> +	}
> +	while (1) {
>  		buf = vi->rvq->vq_ops->detach_unused_buf(vi->rvq);
>  		if (!buf)
>  			break;
> @@ -1035,11 +1025,11 @@ static void __devexit virtnet_remove(struct virtio_device *vdev)
>  	/* Stop all the virtqueues. */
>  	vdev->config->reset(vdev);
>  
> -	/* Free our skbs in send queue, if any. */
> -	__skb_queue_purge(&vi->send);
>  
>  	unregister_netdev(vi->dev);
>  	cancel_delayed_work_sync(&vi->refill);
> +
> +	/* Free unused buffers in both send and recv, if any. */
>  	free_unused_bufs(vi);
>  
>  	vdev->config->del_vqs(vi->vdev);
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-02-03 10:06 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-29 13:16 [PATCH 0/2] virtio net improvements Rusty Russell
2010-01-29 13:19 ` [PATCH 1/2] virtio: Add ability to detach unused buffers from vrings Rusty Russell
2010-01-29 13:19 ` Rusty Russell
2010-01-29 13:20   ` [PATCH 2/2] virtio_net: Defer skb allocation in receive path Date: Wed, 13 Jan 2010 12:53:38 -0800 Rusty Russell
2010-01-29 13:20   ` Rusty Russell
2010-02-02 21:48     ` [PATCH 1/1 net-next] virtio_net: remove send queue Shirley Ma
2010-02-02 21:52       ` [PATCH 0/1 " Shirley Ma
2010-02-03 10:03       ` Michael S. Tsirkin [this message]
2010-02-08  1:41       ` [PATCH 1/1 " Rusty Russell
2010-02-02 23:59     ` [PATCH 2/2] virtio_net: Defer skb allocation in receive path Date: Wed, 13 Jan 2010 12:53:38 -0800 David Miller
2010-02-02 23:59     ` David Miller
2010-02-02 23:59   ` [PATCH 1/2] virtio: Add ability to detach unused buffers from vrings David Miller
2010-02-02 23:59   ` David Miller
2010-02-02 23:27 ` [PATCH 0/2] virtio net improvements Rusty Russell
2010-02-02 23:29   ` David Miller
2010-02-02 23:29   ` David Miller
2010-02-02 23:27 ` Rusty Russell
  -- strict thread matches above, loose matches on Subject: below --
2010-02-09  0:14 [PATCH 1/1 net-next] virtio_net: remove send queue Shirley Ma
2010-02-10 16:54 ` Shirley Ma
2010-02-12 20:28 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100203100300.GB3461@redhat.com \
    --to=mst@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mashirle@us.ibm.com \
    --cc=rusty@rustcorp.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.