]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
KVM: Use "new" memslot's address space ID instead of dedicated param
authorSean Christopherson <seanjc@google.com>
Mon, 6 Dec 2021 19:54:10 +0000 (20:54 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Dec 2021 09:24:19 +0000 (04:24 -0500)
Now that the address space ID is stored in every slot, including fake
slots used for deletion, use the slot's as_id instead of passing in the
redundant information as a param to kvm_set_memslot().  This will greatly
simplify future memslot work by avoiding passing a large number of
variables around purely to honor @as_id.

Drop a comment in the DELETE path about new->as_id being provided purely
for debug, as that's now a lie.

No functional change intended.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
Message-Id: <03189577be214ab8530a4b3a3ee3ed1c2f9e5815.1638817639.git.maciej.szmigiero@oracle.com>

virt/kvm/kvm_main.c

index 615d69bcde2cc70936cec9481b4117b4636eace8..a7a1c872fe6d67e6915afa5be62111e2224d7c9a 100644 (file)
@@ -1551,7 +1551,7 @@ static void kvm_copy_memslots_arch(struct kvm_memslots *to,
 
 static int kvm_set_memslot(struct kvm *kvm,
                           const struct kvm_userspace_memory_region *mem,
-                          struct kvm_memory_slot *new, int as_id,
+                          struct kvm_memory_slot *new,
                           enum kvm_mr_change change)
 {
        struct kvm_memory_slot *slot, old;
@@ -1574,7 +1574,7 @@ static int kvm_set_memslot(struct kvm *kvm,
         */
        mutex_lock(&kvm->slots_arch_lock);
 
-       slots = kvm_dup_memslots(__kvm_memslots(kvm, as_id), change);
+       slots = kvm_dup_memslots(__kvm_memslots(kvm, new->as_id), change);
        if (!slots) {
                mutex_unlock(&kvm->slots_arch_lock);
                return -ENOMEM;
@@ -1594,7 +1594,7 @@ static int kvm_set_memslot(struct kvm *kvm,
                 * dropped by update_memslots anyway.  We'll also revert to the
                 * old memslots if preparing the new memory region fails.
                 */
-               slots = install_new_memslots(kvm, as_id, slots);
+               slots = install_new_memslots(kvm, new->as_id, slots);
 
                /* From this point no new shadow pages pointing to a deleted,
                 * or moved, memslot will be created.
@@ -1616,7 +1616,7 @@ static int kvm_set_memslot(struct kvm *kvm,
                 * to retrieve memslots *after* acquiring slots_arch_lock, thus
                 * the active memslots are guaranteed to be fresh.
                 */
-               kvm_copy_memslots_arch(slots, __kvm_memslots(kvm, as_id));
+               kvm_copy_memslots_arch(slots, __kvm_memslots(kvm, new->as_id));
        }
 
        /*
@@ -1633,7 +1633,7 @@ static int kvm_set_memslot(struct kvm *kvm,
                WARN_ON_ONCE(change != KVM_MR_CREATE);
                memset(&old, 0, sizeof(old));
                old.id = new->id;
-               old.as_id = as_id;
+               old.as_id = new->as_id;
        }
 
        /* Copy the arch-specific data, again after (re)acquiring slots_arch_lock. */
@@ -1644,7 +1644,7 @@ static int kvm_set_memslot(struct kvm *kvm,
                goto out_slots;
 
        update_memslots(slots, new, change);
-       slots = install_new_memslots(kvm, as_id, slots);
+       slots = install_new_memslots(kvm, new->as_id, slots);
 
        /*
         * Update the total number of memslot pages before calling the arch
@@ -1666,7 +1666,7 @@ static int kvm_set_memslot(struct kvm *kvm,
 
 out_slots:
        if (change == KVM_MR_DELETE || change == KVM_MR_MOVE)
-               slots = install_new_memslots(kvm, as_id, slots);
+               slots = install_new_memslots(kvm, new->as_id, slots);
        else
                mutex_unlock(&kvm->slots_arch_lock);
        kvfree(slots);
@@ -1738,13 +1738,9 @@ int __kvm_set_memory_region(struct kvm *kvm,
 
                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);
+               return kvm_set_memslot(kvm, mem, &new, KVM_MR_DELETE);
        }
 
        new.as_id = as_id;
@@ -1807,7 +1803,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
                        bitmap_set(new.dirty_bitmap, 0, new.npages);
        }
 
-       r = kvm_set_memslot(kvm, mem, &new, as_id, change);
+       r = kvm_set_memslot(kvm, mem, &new, change);
        if (r)
                goto out_bitmap;