59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
https://bugs.gentoo.org/560760
 | 
						|
 | 
						|
From ce317461573bac12b10d67699b4ddf1f97cf066c Mon Sep 17 00:00:00 2001
 | 
						|
From: Jason Wang <jasowang@redhat.com>
 | 
						|
Date: Fri, 25 Sep 2015 13:21:28 +0800
 | 
						|
Subject: [PATCH 1/3] virtio: introduce virtqueue_unmap_sg()
 | 
						|
 | 
						|
Factor out sg unmapping logic. This will be reused by the patch that
 | 
						|
can discard descriptor.
 | 
						|
 | 
						|
Cc: Michael S. Tsirkin <mst@redhat.com>
 | 
						|
Cc: Andrew James <andrew.james@hpe.com>
 | 
						|
Signed-off-by: Jason Wang <jasowang@redhat.com>
 | 
						|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
 | 
						|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
 | 
						|
---
 | 
						|
 hw/virtio/virtio.c | 14 ++++++++++----
 | 
						|
 1 file changed, 10 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
 | 
						|
index 7504f8b..6f2b96c 100644
 | 
						|
--- a/hw/virtio/virtio.c
 | 
						|
+++ b/hw/virtio/virtio.c
 | 
						|
@@ -244,14 +244,12 @@ int virtio_queue_empty(VirtQueue *vq)
 | 
						|
     return vring_avail_idx(vq) == vq->last_avail_idx;
 | 
						|
 }
 | 
						|
 
 | 
						|
-void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
 | 
						|
-                    unsigned int len, unsigned int idx)
 | 
						|
+static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem,
 | 
						|
+                               unsigned int len)
 | 
						|
 {
 | 
						|
     unsigned int offset;
 | 
						|
     int i;
 | 
						|
 
 | 
						|
-    trace_virtqueue_fill(vq, elem, len, idx);
 | 
						|
-
 | 
						|
     offset = 0;
 | 
						|
     for (i = 0; i < elem->in_num; i++) {
 | 
						|
         size_t size = MIN(len - offset, elem->in_sg[i].iov_len);
 | 
						|
@@ -267,6 +265,14 @@ void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
 | 
						|
         cpu_physical_memory_unmap(elem->out_sg[i].iov_base,
 | 
						|
                                   elem->out_sg[i].iov_len,
 | 
						|
                                   0, elem->out_sg[i].iov_len);
 | 
						|
+}
 | 
						|
+
 | 
						|
+void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
 | 
						|
+                    unsigned int len, unsigned int idx)
 | 
						|
+{
 | 
						|
+    trace_virtqueue_fill(vq, elem, len, idx);
 | 
						|
+
 | 
						|
+    virtqueue_unmap_sg(vq, elem, len);
 | 
						|
 
 | 
						|
     idx = (idx + vring_used_idx(vq)) % vq->vring.num;
 | 
						|
 
 | 
						|
-- 
 | 
						|
2.6.0.rc2.230.g3dd15c0
 | 
						|
 |