Il 11/04/2014 04:31, Michael Tokarev ha scritto:
ENOENT means the kernel has an empty dirty bitmap for this
slot. Don't abort in that case. This appears to solve
the bug reported at
https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1303926
which first showed up with commit b533f658a98325d: fix return
check for KVM_GET_DIRTY_LOG ioctl
Cc: Serge Hallyn <serge.hal...@ubuntu.com>
Signed-off-by: Michael Tokarev <m...@tls.msk.ru>
---
kvm-all.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index cd4111d..47fa948 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -441,13 +441,19 @@ static int
kvm_physical_sync_dirty_bitmap(MemoryRegionSection *section)
d.slot = mem->slot;
- if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) < 0) {
+ ret = kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d);
+ if (ret >= 0) {
+ /* regular case, process returned bitmap */
+ kvm_get_dirty_pages_log_range(section, d.dirty_bitmap);
+ } else if (ret == -ENOENT) {
+ /* kernel does not have dirty bitmap in this slot */
+ ret = 0;
+ } else {
DPRINTF("ioctl failed %d\n", errno);
ret = -1;
break;
}
- kvm_get_dirty_pages_log_range(section, d.dirty_bitmap);
start_addr = mem->start_addr + mem->memory_size;
}
g_free(d.dirty_bitmap);
I'd rather revert b533f658a98325d instead.
Paolo