From: Shirley Ma <mashirle@us.ibm.com>
To: Rusty Russell <rusty@rustcorp.com.au>,
"Michael S. Tsirkin <mst"@redhat.com,
Rusty Russell <rusty@rustcorp.com.au>
Cc: kvm@vger.kernel.org
Subject: [PATCH 1/1 net-next] virtio_net: remove send queue
Date: Tue, 02 Feb 2010 13:48:51 -0800 [thread overview]
Message-ID: <1265147331.672.20.camel@localhost.localdomain> (raw)
In-Reply-To: <201001292350.04544.rusty@rustcorp.com.au>
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>
---
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);
next prev parent reply other threads:[~2010-02-02 21:49 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-02-02 21:48 ` Shirley Ma [this message]
2010-02-02 21:52 ` [PATCH 0/1 net-next] virtio_net: remove send queue Shirley Ma
2010-02-03 10:03 ` [PATCH 1/1 " Michael S. Tsirkin
2010-02-08 1:41 ` 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-01-29 13:20 ` Rusty Russell
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=1265147331.672.20.camel@localhost.localdomain \
--to=mashirle@us.ibm.com \
--cc="Michael S. Tsirkin <mst"@redhat.com \
--cc=kvm@vger.kernel.org \
--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.