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