From: Takuya Yoshikawa Date: Fri, 11 Jan 2013 09:26:55 +0000 (+0900) Subject: KVM: set_memory_region: Don't check for overlaps unless we create or move a slot X-Git-Tag: firefly_0821_release~3680^2~569^2~181 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0a706beefb1de71bf8551f9860dc529ef14d6753;p=firefly-linux-kernel-4.4.55.git KVM: set_memory_region: Don't check for overlaps unless we create or move a slot Don't need the check for deleting an existing slot or just modifiying the flags. Reviewed-by: Marcelo Tosatti Signed-off-by: Takuya Yoshikawa Signed-off-by: Gleb Natapov --- diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 28eb160fd487..fca64879f967 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -782,14 +782,16 @@ int __kvm_set_memory_region(struct kvm *kvm, if (!npages && !old.npages) goto out; - /* Check for overlaps */ - r = -EEXIST; - kvm_for_each_memslot(slot, kvm->memslots) { - if (slot->id >= KVM_USER_MEM_SLOTS || slot == memslot) - continue; - if (!((base_gfn + npages <= slot->base_gfn) || - (base_gfn >= slot->base_gfn + slot->npages))) - goto out; + if ((npages && !old.npages) || (base_gfn != old.base_gfn)) { + /* Check for overlaps */ + r = -EEXIST; + kvm_for_each_memslot(slot, kvm->memslots) { + if (slot->id >= KVM_USER_MEM_SLOTS || slot == memslot) + continue; + if (!((base_gfn + npages <= slot->base_gfn) || + (base_gfn >= slot->base_gfn + slot->npages))) + goto out; + } } /* Free page dirty bitmap if unneeded */