aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2021-11-29 11:08:40 +0800
committerMichael S. Tsirkin <mst@redhat.com>2021-11-29 08:49:36 -0500
commit0fe7245d8b938f371556c100b0b6ec1d2b41e584 (patch)
treee382a8ea9a8bc8d63263fd8408948314c695c025 /hw
parent846a1e85da646c6006db429648389fc110f92d75 (diff)
downloadqemu-0fe7245d8b938f371556c100b0b6ec1d2b41e584.zip
qemu-0fe7245d8b938f371556c100b0b6ec1d2b41e584.tar.gz
qemu-0fe7245d8b938f371556c100b0b6ec1d2b41e584.tar.bz2
virtio-balloon: process all in sgs for free_page_vq
We only process the first in sg which may lead to the bitmap of the pages belongs to following sgs were not cleared. This may result more pages to be migrated. Fixing this by process all in sgs for free_page_vq. Acked-by: David Hildenbrand <david@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Message-Id: <20211129030841.3611-1-jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/virtio/virtio-balloon.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index c6962fcb..17de255 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -510,6 +510,7 @@ static bool get_free_page_hints(VirtIOBalloon *dev)
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
VirtQueue *vq = dev->free_page_vq;
bool ret = true;
+ int i;
while (dev->block_iothread) {
qemu_cond_wait(&dev->free_page_cond, &dev->free_page_lock);
@@ -544,8 +545,10 @@ static bool get_free_page_hints(VirtIOBalloon *dev)
}
if (elem->in_num && dev->free_page_hint_status == FREE_PAGE_HINT_S_START) {
- qemu_guest_free_page_hint(elem->in_sg[0].iov_base,
- elem->in_sg[0].iov_len);
+ for (i = 0; i < elem->in_num; i++) {
+ qemu_guest_free_page_hint(elem->in_sg[i].iov_base,
+ elem->in_sg[i].iov_len);
+ }
}
out: