When kvm_vm_ioctl_set_memory_region_list() is invoked, we need[...]
to make sure that all memslots are updated in the inactive list
and then swap (preferreably only once) the lists, so that all
changes are visible immediately.
+static int kvm_vm_ioctl_set_memory_region_list(struct kvm *kvm,
+ struct kvm_userspace_memory_region_list *list,
+ struct kvm_userspace_memory_region_entry __user *mem_arg)
+{
+ struct kvm_userspace_memory_region_entry *mem, *m_iter;
+ struct kvm_userspace_memory_region *mem_region;
+ struct kvm_internal_memory_region_list *batch, *b_iter;
+ int i, r = 0;
+ bool *as_to_swap;
+
+ /* TODO: limit the number of mem to a max? */
+
+ if (!list->nent)
+ return r;
+
+ mem = vmemdup_user(mem_arg, array_size(sizeof(*mem), list->nent));
+ if (IS_ERR(mem)) {
+ r = PTR_ERR(mem);
+ goto out;
+ }