From 29b9f5efd78ae0f9cc02dd169b6e80d2c404bade Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Fri, 25 Sep 2015 13:21:29 +0800 Subject: [PATCH] virtio: introduce virtqueue_discard() This patch introduces virtqueue_discard() to discard a descriptor and unmap the sgs. This will be used by the patch that will discard descriptor when packet is truncated. Cc: Michael S. Tsirkin Signed-off-by: Jason Wang Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/virtio/virtio.c | 7 +++++++ include/hw/gvirtio/virtio.h | 2 ++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/tools/qemu-xen/hw/virtio/virtio.c b/tools/qemu-xen/hw/virtio/virtio.c index 6f2b96c..d0bc72e 100644 --- a/tools/qemu-xen/hw/virtio/virtio.c +++ b/tools/qemu-xen/hw/virtio/virtio.c @@ -267,6 +267,13 @@ static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem, 0, elem->out_sg[i].iov_len); } +void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len) +{ + vq->last_avail_idx--; + virtqueue_unmap_sg(vq, elem, len); +} + void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len, unsigned int idx) { diff --git a/tools/qemu-xen/include/hw/virtio/virtio.h b/tools/qemu-xen/include/hw/virtio/virtio.h index 6201ee8..9d09115 100644 --- a/tools/qemu-xen/include/hw/virtio/virtio.h +++ b/tools/qemu-xen/include/hw/virtio/virtio.h @@ -146,6 +146,8 @@ void virtio_del_queue(VirtIODevice *vdev, int n); void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len); void virtqueue_flush(VirtQueue *vq, unsigned int count); +void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len); void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, unsigned int len, unsigned int idx); -- 1.7.0.4