Merge tag 'kvmarm-5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmar...
[linux-2.6-microblaze.git] / arch / arm64 / kvm / mmu.c
index 9a43373..bc2aba9 100644 (file)
@@ -210,13 +210,13 @@ static void stage2_flush_vm(struct kvm *kvm)
 {
        struct kvm_memslots *slots;
        struct kvm_memory_slot *memslot;
-       int idx;
+       int idx, bkt;
 
        idx = srcu_read_lock(&kvm->srcu);
        spin_lock(&kvm->mmu_lock);
 
        slots = kvm_memslots(kvm);
-       kvm_for_each_memslot(memslot, slots)
+       kvm_for_each_memslot(memslot, bkt, slots)
                stage2_flush_memslot(kvm, memslot);
 
        spin_unlock(&kvm->mmu_lock);
@@ -716,14 +716,14 @@ void stage2_unmap_vm(struct kvm *kvm)
 {
        struct kvm_memslots *slots;
        struct kvm_memory_slot *memslot;
-       int idx;
+       int idx, bkt;
 
        idx = srcu_read_lock(&kvm->srcu);
        mmap_read_lock(current->mm);
        spin_lock(&kvm->mmu_lock);
 
        slots = kvm_memslots(kvm);
-       kvm_for_each_memslot(memslot, slots)
+       kvm_for_each_memslot(memslot, bkt, slots)
                stage2_unmap_memslot(kvm, memslot);
 
        spin_unlock(&kvm->mmu_lock);
@@ -1587,7 +1587,6 @@ out:
 }
 
 void kvm_arch_commit_memory_region(struct kvm *kvm,
-                                  const struct kvm_userspace_memory_region *mem,
                                   struct kvm_memory_slot *old,
                                   const struct kvm_memory_slot *new,
                                   enum kvm_mr_change change)
@@ -1597,25 +1596,24 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
         * allocated dirty_bitmap[], dirty pages will be tracked while the
         * memory slot is write protected.
         */
-       if (change != KVM_MR_DELETE && mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
+       if (change != KVM_MR_DELETE && new->flags & KVM_MEM_LOG_DIRTY_PAGES) {
                /*
                 * If we're with initial-all-set, we don't need to write
                 * protect any pages because they're all reported as dirty.
                 * Huge pages and normal pages will be write protect gradually.
                 */
                if (!kvm_dirty_log_manual_protect_and_init_set(kvm)) {
-                       kvm_mmu_wp_memory_region(kvm, mem->slot);
+                       kvm_mmu_wp_memory_region(kvm, new->id);
                }
        }
 }
 
 int kvm_arch_prepare_memory_region(struct kvm *kvm,
-                                  struct kvm_memory_slot *memslot,
-                                  const struct kvm_userspace_memory_region *mem,
+                                  const struct kvm_memory_slot *old,
+                                  struct kvm_memory_slot *new,
                                   enum kvm_mr_change change)
 {
-       hva_t hva = mem->userspace_addr;
-       hva_t reg_end = hva + mem->memory_size;
+       hva_t hva, reg_end;
        int ret = 0;
 
        if (change != KVM_MR_CREATE && change != KVM_MR_MOVE &&
@@ -1626,9 +1624,12 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
         * Prevent userspace from creating a memory region outside of the IPA
         * space addressable by the KVM guest IPA space.
         */
-       if ((memslot->base_gfn + memslot->npages) > (kvm_phys_size(kvm) >> PAGE_SHIFT))
+       if ((new->base_gfn + new->npages) > (kvm_phys_size(kvm) >> PAGE_SHIFT))
                return -EFAULT;
 
+       hva = new->userspace_addr;
+       reg_end = hva + (new->npages << PAGE_SHIFT);
+
        mmap_read_lock(current->mm);
        /*
         * A memory region could potentially cover multiple VMAs, and any holes
@@ -1660,7 +1661,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
 
                if (vma->vm_flags & VM_PFNMAP) {
                        /* IO region dirty page logging not allowed */
-                       if (memslot->flags & KVM_MEM_LOG_DIRTY_PAGES) {
+                       if (new->flags & KVM_MEM_LOG_DIRTY_PAGES) {
                                ret = -EINVAL;
                                break;
                        }