| From: Peter Xu <peterx@redhat.com> |
| Subject: acrn: use the new follow_pfnmap API |
| Date: Mon, 26 Aug 2024 16:43:48 -0400 |
| |
| Use the new API that can understand huge pfn mappings. |
| |
| Link: https://lkml.kernel.org/r/20240826204353.2228736-15-peterx@redhat.com |
| Signed-off-by: Peter Xu <peterx@redhat.com> |
| Cc: Alexander Gordeev <agordeev@linux.ibm.com> |
| Cc: Alex Williamson <alex.williamson@redhat.com> |
| Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: David Hildenbrand <david@redhat.com> |
| Cc: Gavin Shan <gshan@redhat.com> |
| Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com> |
| Cc: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Jason Gunthorpe <jgg@nvidia.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: Niklas Schnelle <schnelle@linux.ibm.com> |
| Cc: Paolo Bonzini <pbonzini@redhat.com> |
| Cc: Ryan Roberts <ryan.roberts@arm.com> |
| Cc: Sean Christopherson <seanjc@google.com> |
| Cc: Sven Schnelle <svens@linux.ibm.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Cc: Will Deacon <will@kernel.org> |
| Cc: Zi Yan <ziy@nvidia.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| drivers/virt/acrn/mm.c | 16 +++++++++------- |
| 1 file changed, 9 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/virt/acrn/mm.c~acrn-use-the-new-follow_pfnmap-api |
| +++ a/drivers/virt/acrn/mm.c |
| @@ -177,9 +177,7 @@ int acrn_vm_ram_map(struct acrn_vm *vm, |
| vma = vma_lookup(current->mm, memmap->vma_base); |
| if (vma && ((vma->vm_flags & VM_PFNMAP) != 0)) { |
| unsigned long start_pfn, cur_pfn; |
| - spinlock_t *ptl; |
| bool writable; |
| - pte_t *ptep; |
| |
| if ((memmap->vma_base + memmap->len) > vma->vm_end) { |
| mmap_read_unlock(current->mm); |
| @@ -187,16 +185,20 @@ int acrn_vm_ram_map(struct acrn_vm *vm, |
| } |
| |
| for (i = 0; i < nr_pages; i++) { |
| - ret = follow_pte(vma, memmap->vma_base + i * PAGE_SIZE, |
| - &ptep, &ptl); |
| + struct follow_pfnmap_args args = { |
| + .vma = vma, |
| + .address = memmap->vma_base + i * PAGE_SIZE, |
| + }; |
| + |
| + ret = follow_pfnmap_start(&args); |
| if (ret) |
| break; |
| |
| - cur_pfn = pte_pfn(ptep_get(ptep)); |
| + cur_pfn = args.pfn; |
| if (i == 0) |
| start_pfn = cur_pfn; |
| - writable = !!pte_write(ptep_get(ptep)); |
| - pte_unmap_unlock(ptep, ptl); |
| + writable = args.writable; |
| + follow_pfnmap_end(&args); |
| |
| /* Disallow write access if the PTE is not writable. */ |
| if (!writable && |
| _ |