Ignore:
Timestamp:
Apr 14, 2017, 9:41:36 PM (10 days ago)
Author:
brainslayer
Message:

kernel update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/arch/arm/kvm/mmu.c

    r31574 r31859  
    293293        phys_addr_t next;
    294294
     295        assert_spin_locked(&kvm->mmu_lock);
    295296        pgd = kvm->arch.pgd + stage2_pgd_index(addr);
    296297        do {
     
    298299                if (!stage2_pgd_none(*pgd))
    299300                        unmap_stage2_puds(kvm, pgd, addr, next);
     301                /*
     302                 * If the range is too large, release the kvm->mmu_lock
     303                 * to prevent starvation and lockup detector warnings.
     304                 */
     305                if (next != end)
     306                        cond_resched_lock(&kvm->mmu_lock);
    300307        } while (pgd++, addr = next, addr != end);
    301308}
     
    804811
    805812        idx = srcu_read_lock(&kvm->srcu);
     813        down_read(&current->mm->mmap_sem);
    806814        spin_lock(&kvm->mmu_lock);
    807815
     
    811819
    812820        spin_unlock(&kvm->mmu_lock);
     821        up_read(&current->mm->mmap_sem);
    813822        srcu_read_unlock(&kvm->srcu, idx);
    814823}
     
    830839                return;
    831840
     841        spin_lock(&kvm->mmu_lock);
    832842        unmap_stage2_range(kvm, 0, KVM_PHYS_SIZE);
     843        spin_unlock(&kvm->mmu_lock);
     844
    833845        /* Free the HW pgd, one page at a time */
    834846        free_pages_exact(kvm->arch.pgd, S2_PGD_SIZE);
     
    18051817                return -EFAULT;
    18061818
     1819        down_read(&current->mm->mmap_sem);
    18071820        /*
    18081821         * A memory region could potentially cover multiple VMAs, and any holes
     
    18481861
    18491862                        /* IO region dirty page logging not allowed */
    1850                         if (memslot->flags & KVM_MEM_LOG_DIRTY_PAGES)
    1851                                 return -EINVAL;
     1863                        if (memslot->flags & KVM_MEM_LOG_DIRTY_PAGES) {
     1864                                ret = -EINVAL;
     1865                                goto out;
     1866                        }
    18521867
    18531868                        ret = kvm_phys_addr_ioremap(kvm, gpa, pa,
     
    18611876
    18621877        if (change == KVM_MR_FLAGS_ONLY)
    1863                 return ret;
     1878                goto out;
    18641879
    18651880        spin_lock(&kvm->mmu_lock);
     
    18691884                stage2_flush_memslot(kvm, memslot);
    18701885        spin_unlock(&kvm->mmu_lock);
     1886out:
     1887        up_read(&current->mm->mmap_sem);
    18711888        return ret;
    18721889}
Note: See TracChangeset for help on using the changeset viewer.