powerpc: Add pmd_pfn()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 14 Feb 2022 15:30:07 +0000 (10:30 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 21 Mar 2022 16:59:02 +0000 (12:59 -0400)
This is straightforward for everything except nohash64 where we
indirect through pmd_page().  There must be a better way to do this.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
arch/powerpc/include/asm/book3s/32/pgtable.h
arch/powerpc/include/asm/nohash/32/pgtable.h
arch/powerpc/include/asm/nohash/64/pgtable.h

index f8b94f78403f192b94d11ebb7cb9720376831008..95e06f2a8e231682500774f2ba56c20dfe2ef5ab 100644 (file)
@@ -372,8 +372,8 @@ static inline void __ptep_set_access_flags(struct vm_area_struct *vma,
 #define __HAVE_ARCH_PTE_SAME
 #define pte_same(A,B)  (((pte_val(A) ^ pte_val(B)) & ~_PAGE_HASHPTE) == 0)
 
-#define pmd_page(pmd)          \
-       pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)
+#define pmd_pfn(pmd)           (pmd_val(pmd) >> PAGE_SHIFT)
+#define pmd_page(pmd)          pfn_to_page(pmd_pfn(pmd))
 
 /*
  * Encode and decode a swap entry.
index d959c2a73fbf4c839b923644e4a31446d3c74734..dcc9b338e0427d6fade1384bf6cb33b750c1026c 100644 (file)
@@ -349,15 +349,14 @@ static inline int pte_young(pte_t pte)
  * of the pte page.  -- paulus
  */
 #ifndef CONFIG_BOOKE
-#define pmd_page(pmd)          \
-       pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)
+#define pmd_pfn(pmd)           (pmd_val(pmd) >> PAGE_SHIFT)
 #else
 #define pmd_page_vaddr(pmd)    \
        ((unsigned long)(pmd_val(pmd) & ~(PTE_TABLE_SIZE - 1)))
-#define pmd_page(pmd)          \
-       pfn_to_page((__pa(pmd_val(pmd)) >> PAGE_SHIFT))
+#define pmd_pfn(pmd)           (__pa(pmd_val(pmd)) >> PAGE_SHIFT)
 #endif
 
+#define pmd_page(pmd)          pfn_to_page(pmd_pfn(pmd))
 /*
  * Encode and decode a swap entry.
  * Note that the bits we use in a PTE for representing a swap entry
index 2816d158280ade8adf22d8a9451b6e93f13b02c1..78888b0c30f6860f94094ac579ff18184978a085 100644 (file)
@@ -142,6 +142,7 @@ static inline pte_t pmd_pte(pmd_t pmd)
 #define        pmd_present(pmd)        (!pmd_none(pmd))
 #define pmd_page_vaddr(pmd)    (pmd_val(pmd) & ~PMD_MASKED_BITS)
 extern struct page *pmd_page(pmd_t pmd);
+#define pmd_pfn(pmd)           (page_to_pfn(pmd_page(pmd)))
 
 static inline void pud_set(pud_t *pudp, unsigned long val)
 {