Hm, if !npages we should just kvm_free_physmem_slot(&old, NULL).Actually, I believe we need a little bit more than that, because we can
have valid rmaps in flight.
Tell me what you think about this.
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index b1953ee..f605bba 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -735,11 +735,17 @@ int __kvm_set_memory_region(struct kvm *kvm,
base_gfn = mem->guest_phys_addr >> PAGE_SHIFT;
npages = mem->memory_size >> PAGE_SHIFT;
- if (!npages)
- mem->flags &= ~KVM_MEM_LOG_DIRTY_PAGES;
-
new = old = *memslot;
+ if (!npages) {
+ mem->flags &= ~KVM_MEM_LOG_DIRTY_PAGES;
+ kvm_arch_flush_shadow(kvm);
+ kvm_free_physmem_slot(memslot, NULL);
+ kvm_arch_set_memory_region(kvm, mem, old, user_alloc);
+ goto out;
+ }