4f5da8
From fc6f666f00182fe587068bd45e4e9e6d135d03fb Mon Sep 17 00:00:00 2001
4f5da8
From: Ladi Prosek <lprosek@redhat.com>
4f5da8
Date: Wed, 5 Oct 2016 17:22:23 +0200
4f5da8
Subject: [PATCH 1/8] virtio: introduce virtqueue_unmap_sg()
4f5da8
4f5da8
RH-Author: Ladi Prosek <lprosek@redhat.com>
4f5da8
Message-id: <1475666548-9186-2-git-send-email-lprosek@redhat.com>
4f5da8
Patchwork-id: 72480
4f5da8
O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 1/6] virtio: introduce virtqueue_unmap_sg()
4f5da8
Bugzilla: 1393484
4f5da8
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
4f5da8
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
4f5da8
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
4f5da8
4f5da8
From: Jason Wang <jasowang@redhat.com>
4f5da8
4f5da8
Factor out sg unmapping logic. This will be reused by the patch that
4f5da8
can discard descriptor.
4f5da8
4f5da8
Cc: Michael S. Tsirkin <mst@redhat.com>
4f5da8
Cc: Andrew James <andrew.james@hpe.com>
4f5da8
Signed-off-by: Jason Wang <jasowang@redhat.com>
4f5da8
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
4f5da8
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
4f5da8
(cherry picked from commit ce317461573bac12b10d67699b4ddf1f97cf066c)
4f5da8
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
4f5da8
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
4f5da8
---
4f5da8
 hw/virtio/virtio.c | 14 ++++++++++----
4f5da8
 1 file changed, 10 insertions(+), 4 deletions(-)
4f5da8
4f5da8
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
4f5da8
index 0df4ed3..5ee899a 100644
4f5da8
--- a/hw/virtio/virtio.c
4f5da8
+++ b/hw/virtio/virtio.c
4f5da8
@@ -228,14 +228,12 @@ int virtio_queue_empty(VirtQueue *vq)
4f5da8
     return vring_avail_idx(vq) == vq->last_avail_idx;
4f5da8
 }
4f5da8
 
4f5da8
-void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
4f5da8
-                    unsigned int len, unsigned int idx)
4f5da8
+static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem,
4f5da8
+                               unsigned int len)
4f5da8
 {
4f5da8
     unsigned int offset;
4f5da8
     int i;
4f5da8
 
4f5da8
-    trace_virtqueue_fill(vq, elem, len, idx);
4f5da8
-
4f5da8
     offset = 0;
4f5da8
     for (i = 0; i < elem->in_num; i++) {
4f5da8
         size_t size = MIN(len - offset, elem->in_sg[i].iov_len);
4f5da8
@@ -251,6 +249,14 @@ void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
4f5da8
         cpu_physical_memory_unmap(elem->out_sg[i].iov_base,
4f5da8
                                   elem->out_sg[i].iov_len,
4f5da8
                                   0, elem->out_sg[i].iov_len);
4f5da8
+}
4f5da8
+
4f5da8
+void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
4f5da8
+                    unsigned int len, unsigned int idx)
4f5da8
+{
4f5da8
+    trace_virtqueue_fill(vq, elem, len, idx);
4f5da8
+
4f5da8
+    virtqueue_unmap_sg(vq, elem, len);
4f5da8
 
4f5da8
     idx = (idx + vring_used_idx(vq)) % vq->vring.num;
4f5da8
 
4f5da8
-- 
4f5da8
1.8.3.1
4f5da8