| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2008-2013 Freescale Semiconductor, Inc. All rights reserved. |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 10 | 11 | * Description: |
|---|
| 11 | 12 | * This file is based on arch/powerpc/kvm/44x_tlb.c, |
|---|
| 12 | 13 | * by Hollis Blanchard <hollisb@us.ibm.com>. |
|---|
| 13 | | - * |
|---|
| 14 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 15 | | - * it under the terms of the GNU General Public License, version 2, as |
|---|
| 16 | | - * published by the Free Software Foundation. |
|---|
| 17 | 14 | */ |
|---|
| 18 | 15 | |
|---|
| 19 | 16 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 358 | 355 | |
|---|
| 359 | 356 | if (tlbsel == 1) { |
|---|
| 360 | 357 | struct vm_area_struct *vma; |
|---|
| 361 | | - down_read(¤t->mm->mmap_sem); |
|---|
| 358 | + mmap_read_lock(kvm->mm); |
|---|
| 362 | 359 | |
|---|
| 363 | | - vma = find_vma(current->mm, hva); |
|---|
| 360 | + vma = find_vma(kvm->mm, hva); |
|---|
| 364 | 361 | if (vma && hva >= vma->vm_start && |
|---|
| 365 | 362 | (vma->vm_flags & VM_PFNMAP)) { |
|---|
| 366 | 363 | /* |
|---|
| .. | .. |
|---|
| 425 | 422 | break; |
|---|
| 426 | 423 | } |
|---|
| 427 | 424 | } else if (vma && hva >= vma->vm_start && |
|---|
| 428 | | - (vma->vm_flags & VM_HUGETLB)) { |
|---|
| 425 | + is_vm_hugetlb_page(vma)) { |
|---|
| 429 | 426 | unsigned long psize = vma_kernel_pagesize(vma); |
|---|
| 430 | 427 | |
|---|
| 431 | 428 | tsize = (gtlbe->mas1 & MAS1_TSIZE_MASK) >> |
|---|
| .. | .. |
|---|
| 444 | 441 | tsize = max(BOOK3E_PAGESZ_4K, tsize & ~1); |
|---|
| 445 | 442 | } |
|---|
| 446 | 443 | |
|---|
| 447 | | - up_read(¤t->mm->mmap_sem); |
|---|
| 444 | + mmap_read_unlock(kvm->mm); |
|---|
| 448 | 445 | } |
|---|
| 449 | 446 | |
|---|
| 450 | 447 | if (likely(!pfnmap)) { |
|---|
| .. | .. |
|---|
| 738 | 735 | } |
|---|
| 739 | 736 | |
|---|
| 740 | 737 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
|---|
| 741 | | - bool blockable) |
|---|
| 738 | + unsigned flags) |
|---|
| 742 | 739 | { |
|---|
| 743 | 740 | /* kvm_unmap_hva flushes everything anyways */ |
|---|
| 744 | 741 | kvm_unmap_hva(kvm, start); |
|---|
| .. | .. |
|---|
| 758 | 755 | return 0; |
|---|
| 759 | 756 | } |
|---|
| 760 | 757 | |
|---|
| 761 | | -void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte) |
|---|
| 758 | +int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte) |
|---|
| 762 | 759 | { |
|---|
| 763 | 760 | /* The page will get remapped properly on its next fault */ |
|---|
| 764 | 761 | kvm_unmap_hva(kvm, hva); |
|---|
| 762 | + return 0; |
|---|
| 765 | 763 | } |
|---|
| 766 | 764 | |
|---|
| 767 | 765 | /*****************************************/ |
|---|