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>
This commit is contained in:
parent
846a1e85da
commit
0fe7245d8b
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user