From: "Michael S. Tsirkin" <mst@redhat.com>
To: Shirley Ma <mashirle@us.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
Avi Kivity <avi@redhat.com>,
netdev@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/2] virtio: Add detach unused buffer from vring
Date: Sun, 20 Dec 2009 13:24:05 +0200 [thread overview]
Message-ID: <20091220112405.GA11168@redhat.com> (raw)
In-Reply-To: <1261122230.4148.26.camel@localhost.localdomain>
On Thu, Dec 17, 2009 at 11:43:50PM -0800, Shirley Ma wrote:
> There's currently no way for a virtio driver to ask for unused
> buffers, so it has to keep a list itself to reclaim them at shutdown.
> This is redundant, since virtio_ring stores that information. So
> add a new hook to do this: virtio_net will be the first user.
>
> Signed-off-by: Shirley Ma <xma@us.ibm.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> drivers/virtio/virtio_ring.c | 25 +++++++++++++++++++++++++
> include/linux/virtio.h | 4 ++++
> 2 files changed, 29 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index fbd2ecd..71929ee 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -334,6 +334,30 @@ static bool vring_enable_cb(struct virtqueue *_vq)
> return true;
> }
>
> +static void *vring_detach_unused_buf(struct virtqueue *_vq)
> +{
> + struct vring_virtqueue *vq = to_vvq(_vq);
> + unsigned int i;
> + void *buf;
> +
> + START_USE(vq);
> +
> + for (i = 0; i < vq->vring.num; i++) {
> + if (!vq->data[i])
> + continue;
> + /* detach_buf clears data, so grab it now. */
> + buf = vq->data[i];
> + detach_buf(vq, i);
> + END_USE(vq);
> + return buf;
> + }
> + /* That should have freed everything. */
> + BUG_ON(vq->num_free != vq->vring.num);
> +
> + END_USE(vq);
> + return NULL;
> +}
> +
> irqreturn_t vring_interrupt(int irq, void *_vq)
> {
> struct vring_virtqueue *vq = to_vvq(_vq);
> @@ -360,6 +384,7 @@ static struct virtqueue_ops vring_vq_ops = {
> .kick = vring_kick,
> .disable_cb = vring_disable_cb,
> .enable_cb = vring_enable_cb,
> + .detach_unused_buf = vring_detach_unused_buf,
> };
>
> struct virtqueue *vring_new_virtqueue(unsigned int num,
> diff --git a/include/linux/virtio.h b/include/linux/virtio.h
> index 057a2e0..f508c65 100644
> --- a/include/linux/virtio.h
> +++ b/include/linux/virtio.h
> @@ -51,6 +51,9 @@ struct virtqueue {
> * This re-enables callbacks; it returns "false" if there are pending
> * buffers in the queue, to detect a possible race between the driver
> * checking for more work, and enabling callbacks.
> + * @detach_unused_buf: detach first unused buffer
> + * vq: the struct virtqueue we're talking about.
> + * Returns NULL or the "data" token handed to add_buf
> *
> * Locking rules are straightforward: the driver is responsible for
> * locking. No two operations may be invoked simultaneously, with the exception
> @@ -71,6 +74,7 @@ struct virtqueue_ops {
>
> void (*disable_cb)(struct virtqueue *vq);
> bool (*enable_cb)(struct virtqueue *vq);
> + void *(*detach_unused_buf)(struct virtqueue *vq);
> };
>
> /**
>
next prev parent reply other threads:[~2009-12-20 11:24 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-18 7:41 [PATCH net-next 0/2] Defer skb allocation in virtio_net recv Shirley Ma
2009-12-18 7:43 ` [PATCH 1/2] virtio: Add detach unused buffer from vring Shirley Ma
2009-12-20 11:24 ` Michael S. Tsirkin [this message]
2009-12-24 13:35 ` Amit Shah
2009-12-18 7:44 ` [PATCH 2/2] virtio_net: Defer skb allocation in receive path Shirley Ma
2009-12-24 13:37 ` Amit Shah
2010-01-04 21:25 ` Shirley Ma
2010-01-04 21:14 ` Michael S. Tsirkin
2010-01-11 19:09 ` Shirley Ma
2010-01-13 20:53 ` [PATCH v2 " Shirley Ma
2010-01-13 20:57 ` Michael S. Tsirkin
2010-01-13 21:33 ` Shirley Ma
2010-01-13 21:37 ` Michael S. Tsirkin
2010-01-13 22:23 ` Shirley Ma
2010-01-13 22:48 ` Michael S. Tsirkin
2010-01-14 0:37 ` Shirley Ma
2010-01-29 14:05 ` Michael S. Tsirkin
2010-02-02 18:07 ` Shirley Ma
2010-01-16 21:31 ` Rusty Russell
2009-12-18 7:57 ` [PATCH net-next 0/2] Defer skb allocation in virtio_net recv Shirley Ma
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=20091220112405.GA11168@redhat.com \
--to=mst@redhat.com \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mashirle@us.ibm.com \
--cc=netdev@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.