@@ -1670,29 +1670,6 @@ static int kvm_set_memslot(struct kvm *kvm,
return r;
}
-static int kvm_delete_memslot(struct kvm *kvm,
- const struct kvm_userspace_memory_region *mem,
- struct kvm_memory_slot *old, int as_id)
-{
- struct kvm_memory_slot new;
-
- if (!old->npages)
- return -EINVAL;
-
- if (WARN_ON_ONCE(kvm->nr_memslot_pages < old->npages))
- return -EIO;
-
- memset(&new, 0, sizeof(new));
- new.id = old->id;
- /*
- * This is only for debugging purpose; it should never be referenced
- * for a removed memslot.
- */
- new.as_id = as_id;
-
- return kvm_set_memslot(kvm, mem, &new, as_id, KVM_MR_DELETE);
-}
-
/*
* Allocate some memory and give it an address in the guest physical address
* space.
@@ -1749,8 +1726,23 @@ int __kvm_set_memory_region(struct kvm *kvm,
old.id = id;
}
- if (!mem->memory_size)
- return kvm_delete_memslot(kvm, mem, &old, as_id);
+ if (!mem->memory_size) {
+ if (!old.npages)
+ return -EINVAL;
+
+ if (WARN_ON_ONCE(kvm->nr_memslot_pages < old.npages))
+ return -EIO;
+
+ memset(&new, 0, sizeof(new));
+ new.id = id;
+ /*
+ * This is only for debugging purpose; it should never be
+ * referenced for a removed memslot.
+ */
+ new.as_id = as_id;
+
+ return kvm_set_memslot(kvm, mem, &new, as_id, KVM_MR_DELETE);
+ }
new.as_id = as_id;
new.id = id;