powerpc/32: drop get_pteptr()
authorChristophe Leroy <christophe.leroy@c-s.fr>
Thu, 9 Jan 2020 08:25:26 +0000 (08:25 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 25 Feb 2020 23:34:41 +0000 (10:34 +1100)
Commit 8d30c14cab30 ("powerpc/mm: Rework I$/D$ coherency (v3)") and
commit 90ac19a8b21b ("[POWERPC] Abolish iopa(), mm_ptov(),
io_block_mapping() from arch/powerpc") removed the use of get_pteptr()
outside of mm/pgtable_32.c

In mm/pgtable_32.c, the only user of get_pteptr() is change_page_attr()
which operates on kernel context and on lowmem pages only.

Make virt_to_kpte() available outside of mm/mem.c and use it instead
of get_pteptr(), and drop get_pteptr()

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/788378c6c3ba5c5298caab7c7f95e6c3c88244b8.1578558199.git.christophe.leroy@c-s.fr
arch/powerpc/include/asm/pgtable.h
arch/powerpc/mm/mem.c
arch/powerpc/mm/pgtable_32.c

index 22bf7bb666a74b7ce63b040aaecf0a56880ea583..b80bfd41828d46503e6260ec5f8252feb11c37fc 100644 (file)
@@ -51,6 +51,11 @@ static inline pmd_t *pmd_ptr_k(unsigned long va)
 {
        return pmd_offset(pud_offset(pgd_offset_k(va), va), va);
 }
+
+static inline pte_t *virt_to_kpte(unsigned long vaddr)
+{
+       return pte_offset_kernel(pmd_ptr_k(vaddr), vaddr);
+}
 #endif
 
 #include <asm/tlbflush.h>
index b7325bb4c8906f4ad5c8fe81fe4f62583da34fb6..4f852d2a62f50516cbb3c0436406bfd0b7d15039 100644 (file)
@@ -66,11 +66,6 @@ pte_t *kmap_pte;
 EXPORT_SYMBOL(kmap_pte);
 pgprot_t kmap_prot;
 EXPORT_SYMBOL(kmap_prot);
-
-static inline pte_t *virt_to_kpte(unsigned long vaddr)
-{
-       return pte_offset_kernel(pmd_ptr_k(vaddr), vaddr);
-}
 #endif
 
 pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
index d90c166bb6e5b8c9b4fde2d18ff2ef1d4682b4d6..f62de06e3d07c9259f1ecb0ee85830832fa03c96 100644 (file)
@@ -121,44 +121,9 @@ void __init mapin_ram(void)
        }
 }
 
-/* Scan the real Linux page tables and return a PTE pointer for
- * a virtual address in a context.
- * Returns true (1) if PTE was found, zero otherwise.  The pointer to
- * the PTE pointer is unmodified if PTE is not found.
- */
-static int
-get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, pmd_t **pmdp)
-{
-        pgd_t  *pgd;
-       pud_t   *pud;
-        pmd_t  *pmd;
-        pte_t  *pte;
-        int     retval = 0;
-
-        pgd = pgd_offset(mm, addr & PAGE_MASK);
-        if (pgd) {
-               pud = pud_offset(pgd, addr & PAGE_MASK);
-               if (pud && pud_present(*pud)) {
-                       pmd = pmd_offset(pud, addr & PAGE_MASK);
-                       if (pmd_present(*pmd)) {
-                               pte = pte_offset_map(pmd, addr & PAGE_MASK);
-                               if (pte) {
-                                       retval = 1;
-                                       *ptep = pte;
-                                       if (pmdp)
-                                               *pmdp = pmd;
-                                       /* XXX caller needs to do pte_unmap, yuck */
-                               }
-                       }
-               }
-        }
-        return(retval);
-}
-
 static int __change_page_attr_noflush(struct page *page, pgprot_t prot)
 {
        pte_t *kpte;
-       pmd_t *kpmd;
        unsigned long address;
 
        BUG_ON(PageHighMem(page));
@@ -166,10 +131,10 @@ static int __change_page_attr_noflush(struct page *page, pgprot_t prot)
 
        if (v_block_mapped(address))
                return 0;
-       if (!get_pteptr(&init_mm, address, &kpte, &kpmd))
+       kpte = virt_to_kpte(address);
+       if (!kpte)
                return -EINVAL;
        __set_pte_at(&init_mm, address, kpte, mk_pte(page, prot), 0);
-       pte_unmap(kpte);
 
        return 0;
 }