Commit 9cf6fa24 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Linus Torvalds

mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *

No functional change in this patch.

[aneesh.kumar@linux.ibm.com: fix]
  Link: https://lkml.kernel.org/r/87wnqtnb60.fsf@linux.ibm.com
[sfr@canb.auug.org.au: another fix]
  Link: https://lkml.kernel.org/r/20210619134410.89559-1-aneesh.kumar@linux.ibm.com

Link: https://lkml.kernel.org/r/20210615110859.320299-1-aneesh.kumar@linux.ibm.com
Link: https://lore.kernel.org/linuxppc-dev/CAHk-=wi+J+iodze9FtjM3Zi4j4OeS+qqbKxME9QN4roxPEXH9Q@mail.gmail.com/Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Hugh Dickins <hughd@google.com>
Cc: Joel Fernandes <joel@joelfernandes.org>
Cc: Kalesh Singh <kaleshsingh@google.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 44e8a5e9
...@@ -236,8 +236,10 @@ pmd_page_vaddr(pmd_t pmd) ...@@ -236,8 +236,10 @@ pmd_page_vaddr(pmd_t pmd)
#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> 32)) #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> 32))
#define pud_page(pud) (pfn_to_page(pud_val(pud) >> 32)) #define pud_page(pud) (pfn_to_page(pud_val(pud) >> 32))
extern inline unsigned long pud_page_vaddr(pud_t pgd) extern inline pmd_t *pud_pgtable(pud_t pgd)
{ return PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); } {
return (pmd_t *)(PAGE_OFFSET + ((pud_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)));
}
extern inline int pte_none(pte_t pte) { return !pte_val(pte); } extern inline int pte_none(pte_t pte) { return !pte_val(pte); }
extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; } extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; }
...@@ -287,7 +289,7 @@ extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; retu ...@@ -287,7 +289,7 @@ extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; retu
/* Find an entry in the second-level page table.. */ /* Find an entry in the second-level page table.. */
extern inline pmd_t * pmd_offset(pud_t * dir, unsigned long address) extern inline pmd_t * pmd_offset(pud_t * dir, unsigned long address)
{ {
pmd_t *ret = (pmd_t *) pud_page_vaddr(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1)); pmd_t *ret = pud_pgtable(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
smp_rmb(); /* see above */ smp_rmb(); /* see above */
return ret; return ret;
} }
......
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
flush_pmd_entry(pudp); \ flush_pmd_entry(pudp); \
} while (0) } while (0)
static inline pmd_t *pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK); return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK);
} }
......
...@@ -649,9 +649,9 @@ static inline phys_addr_t pud_page_paddr(pud_t pud) ...@@ -649,9 +649,9 @@ static inline phys_addr_t pud_page_paddr(pud_t pud)
return __pud_to_phys(pud); return __pud_to_phys(pud);
} }
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return (unsigned long)__va(pud_page_paddr(pud)); return (pmd_t *)__va(pud_page_paddr(pud));
} }
/* Find an entry in the second-level page table. */ /* Find an entry in the second-level page table. */
......
...@@ -273,7 +273,7 @@ ia64_phys_addr_valid (unsigned long addr) ...@@ -273,7 +273,7 @@ ia64_phys_addr_valid (unsigned long addr)
#define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud))) #define pud_bad(pud) (!ia64_phys_addr_valid(pud_val(pud)))
#define pud_present(pud) (pud_val(pud) != 0UL) #define pud_present(pud) (pud_val(pud) != 0UL)
#define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL)
#define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & _PFN_MASK)) #define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & _PFN_MASK))
#define pud_page(pud) virt_to_page((pud_val(pud) + PAGE_OFFSET)) #define pud_page(pud) virt_to_page((pud_val(pud) + PAGE_OFFSET))
#if CONFIG_PGTABLE_LEVELS == 4 #if CONFIG_PGTABLE_LEVELS == 4
......
...@@ -131,7 +131,7 @@ static inline void pud_set(pud_t *pudp, pmd_t *pmdp) ...@@ -131,7 +131,7 @@ static inline void pud_set(pud_t *pudp, pmd_t *pmdp)
#define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK)) #define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK))
#define pmd_page_vaddr(pmd) ((unsigned long)__va(pmd_val(pmd) & _TABLE_MASK)) #define pmd_page_vaddr(pmd) ((unsigned long)__va(pmd_val(pmd) & _TABLE_MASK))
#define pud_page_vaddr(pud) ((unsigned long)__va(pud_val(pud) & _TABLE_MASK)) #define pud_pgtable(pud) ((pmd_t *)__va(pud_val(pud) & _TABLE_MASK))
#define pte_none(pte) (!pte_val(pte)) #define pte_none(pte) (!pte_val(pte))
......
...@@ -313,9 +313,9 @@ static inline void pud_clear(pud_t *pudp) ...@@ -313,9 +313,9 @@ static inline void pud_clear(pud_t *pudp)
#endif #endif
#ifndef __PAGETABLE_PMD_FOLDED #ifndef __PAGETABLE_PMD_FOLDED
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return pud_val(pud); return (pmd_t *)pud_val(pud);
} }
#define pud_phys(pud) virt_to_phys((void *)pud_val(pud)) #define pud_phys(pud) virt_to_phys((void *)pud_val(pud))
#define pud_page(pud) (pfn_to_page(pud_phys(pud) >> PAGE_SHIFT)) #define pud_page(pud) (pfn_to_page(pud_phys(pud) >> PAGE_SHIFT))
......
...@@ -322,8 +322,8 @@ static inline void pmd_clear(pmd_t *pmd) { ...@@ -322,8 +322,8 @@ static inline void pmd_clear(pmd_t *pmd) {
#if CONFIG_PGTABLE_LEVELS == 3 #if CONFIG_PGTABLE_LEVELS == 3
#define pud_page_vaddr(pud) ((unsigned long) __va(pud_address(pud))) #define pud_pgtable(pud) ((pmd_t *) __va(pud_address(pud)))
#define pud_page(pud) virt_to_page((void *)pud_page_vaddr(pud)) #define pud_page(pud) virt_to_page((void *)pud_pgtable(pud))
/* For 64 bit we have three level tables */ /* For 64 bit we have three level tables */
......
...@@ -1051,9 +1051,13 @@ extern struct page *p4d_page(p4d_t p4d); ...@@ -1051,9 +1051,13 @@ extern struct page *p4d_page(p4d_t p4d);
/* Pointers in the page table tree are physical addresses */ /* Pointers in the page table tree are physical addresses */
#define __pgtable_ptr_val(ptr) __pa(ptr) #define __pgtable_ptr_val(ptr) __pa(ptr)
#define pud_page_vaddr(pud) __va(pud_val(pud) & ~PUD_MASKED_BITS)
#define p4d_page_vaddr(p4d) __va(p4d_val(p4d) & ~P4D_MASKED_BITS) #define p4d_page_vaddr(p4d) __va(p4d_val(p4d) & ~P4D_MASKED_BITS)
static inline pmd_t *pud_pgtable(pud_t pud)
{
return (pmd_t *)__va(pud_val(pud) & ~PUD_MASKED_BITS);
}
#define pte_ERROR(e) \ #define pte_ERROR(e) \
pr_err("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) pr_err("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
#define pmd_ERROR(e) \ #define pmd_ERROR(e) \
......
...@@ -162,7 +162,11 @@ static inline void pud_clear(pud_t *pudp) ...@@ -162,7 +162,11 @@ static inline void pud_clear(pud_t *pudp)
#define pud_bad(pud) (!is_kernel_addr(pud_val(pud)) \ #define pud_bad(pud) (!is_kernel_addr(pud_val(pud)) \
|| (pud_val(pud) & PUD_BAD_BITS)) || (pud_val(pud) & PUD_BAD_BITS))
#define pud_present(pud) (pud_val(pud) != 0) #define pud_present(pud) (pud_val(pud) != 0)
#define pud_page_vaddr(pud) (pud_val(pud) & ~PUD_MASKED_BITS)
static inline pmd_t *pud_pgtable(pud_t pud)
{
return (pmd_t *)(pud_val(pud) & ~PUD_MASKED_BITS);
}
extern struct page *pud_page(pud_t pud); extern struct page *pud_page(pud_t pud);
......
...@@ -820,7 +820,7 @@ static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr, ...@@ -820,7 +820,7 @@ static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr,
continue; continue;
} }
pmd_base = (pmd_t *)pud_page_vaddr(*pud); pmd_base = pud_pgtable(*pud);
remove_pmd_table(pmd_base, addr, next); remove_pmd_table(pmd_base, addr, next);
free_pmd_table(pmd_base, pud); free_pmd_table(pmd_base, pud);
} }
...@@ -1105,7 +1105,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) ...@@ -1105,7 +1105,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr)
pmd_t *pmd; pmd_t *pmd;
int i; int i;
pmd = (pmd_t *)pud_page_vaddr(*pud); pmd = pud_pgtable(*pud);
pud_clear(pud); pud_clear(pud);
flush_tlb_kernel_range(addr, addr + PUD_SIZE); flush_tlb_kernel_range(addr, addr + PUD_SIZE);
......
...@@ -115,7 +115,7 @@ struct page *pud_page(pud_t pud) ...@@ -115,7 +115,7 @@ struct page *pud_page(pud_t pud)
VM_WARN_ON(!pud_huge(pud)); VM_WARN_ON(!pud_huge(pud));
return pte_page(pud_pte(pud)); return pte_page(pud_pte(pud));
} }
return virt_to_page(pud_page_vaddr(pud)); return virt_to_page(pud_pgtable(pud));
} }
/* /*
......
...@@ -60,9 +60,9 @@ static inline void pud_clear(pud_t *pudp) ...@@ -60,9 +60,9 @@ static inline void pud_clear(pud_t *pudp)
set_pud(pudp, __pud(0)); set_pud(pudp, __pud(0));
} }
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return (unsigned long)pfn_to_virt(pud_val(pud) >> _PAGE_PFN_SHIFT); return (pmd_t *)pfn_to_virt(pud_val(pud) >> _PAGE_PFN_SHIFT);
} }
static inline struct page *pud_page(pud_t pud) static inline struct page *pud_page(pud_t pud)
......
...@@ -32,9 +32,9 @@ typedef struct { unsigned long long pmd; } pmd_t; ...@@ -32,9 +32,9 @@ typedef struct { unsigned long long pmd; } pmd_t;
#define pmd_val(x) ((x).pmd) #define pmd_val(x) ((x).pmd)
#define __pmd(x) ((pmd_t) { (x) } ) #define __pmd(x) ((pmd_t) { (x) } )
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return pud_val(pud); return (pmd_t *)pud_val(pud);
} }
/* only used by the stubbed out hugetlb gup code, should never be called */ /* only used by the stubbed out hugetlb gup code, should never be called */
......
...@@ -151,13 +151,13 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) ...@@ -151,13 +151,13 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
return (unsigned long)__nocache_va(v << 4); return (unsigned long)__nocache_va(v << 4);
} }
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
if (srmmu_device_memory(pud_val(pud))) { if (srmmu_device_memory(pud_val(pud))) {
return ~0; return (pmd_t *)~0;
} else { } else {
unsigned long v = pud_val(pud) & SRMMU_PTD_PMASK; unsigned long v = pud_val(pud) & SRMMU_PTD_PMASK;
return (unsigned long)__nocache_va(v << 4); return (pmd_t *)__nocache_va(v << 4);
} }
} }
......
...@@ -841,18 +841,18 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) ...@@ -841,18 +841,18 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
return ((unsigned long) __va(pfn << PAGE_SHIFT)); return ((unsigned long) __va(pfn << PAGE_SHIFT));
} }
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
pte_t pte = __pte(pud_val(pud)); pte_t pte = __pte(pud_val(pud));
unsigned long pfn; unsigned long pfn;
pfn = pte_pfn(pte); pfn = pte_pfn(pte);
return ((unsigned long) __va(pfn << PAGE_SHIFT)); return ((pmd_t *) __va(pfn << PAGE_SHIFT));
} }
#define pmd_page(pmd) virt_to_page((void *)pmd_page_vaddr(pmd)) #define pmd_page(pmd) virt_to_page((void *)pmd_page_vaddr(pmd))
#define pud_page(pud) virt_to_page((void *)pud_page_vaddr(pud)) #define pud_page(pud) virt_to_page((void *)pud_pgtable(pud))
#define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL) #define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL)
#define pud_present(pud) (pud_val(pud) != 0U) #define pud_present(pud) (pud_val(pud) != 0U)
#define pud_clear(pudp) (pud_val(*(pudp)) = 0UL) #define pud_clear(pudp) (pud_val(*(pudp)) = 0UL)
......
...@@ -83,7 +83,7 @@ static inline void pud_clear (pud_t *pud) ...@@ -83,7 +83,7 @@ static inline void pud_clear (pud_t *pud)
} }
#define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK) #define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK)
#define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & PAGE_MASK)) #define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & PAGE_MASK))
static inline unsigned long pte_pfn(pte_t pte) static inline unsigned long pte_pfn(pte_t pte)
{ {
......
...@@ -836,9 +836,9 @@ static inline int pud_present(pud_t pud) ...@@ -836,9 +836,9 @@ static inline int pud_present(pud_t pud)
return pud_flags(pud) & _PAGE_PRESENT; return pud_flags(pud) & _PAGE_PRESENT;
} }
static inline unsigned long pud_page_vaddr(pud_t pud) static inline pmd_t *pud_pgtable(pud_t pud)
{ {
return (unsigned long)__va(pud_val(pud) & pud_pfn_mask(pud)); return (pmd_t *)__va(pud_val(pud) & pud_pfn_mask(pud));
} }
/* /*
......
...@@ -1134,7 +1134,7 @@ static void __unmap_pmd_range(pud_t *pud, pmd_t *pmd, ...@@ -1134,7 +1134,7 @@ static void __unmap_pmd_range(pud_t *pud, pmd_t *pmd,
unsigned long start, unsigned long end) unsigned long start, unsigned long end)
{ {
if (unmap_pte_range(pmd, start, end)) if (unmap_pte_range(pmd, start, end))
if (try_to_free_pmd_page((pmd_t *)pud_page_vaddr(*pud))) if (try_to_free_pmd_page(pud_pgtable(*pud)))
pud_clear(pud); pud_clear(pud);
} }
...@@ -1178,7 +1178,7 @@ static void unmap_pmd_range(pud_t *pud, unsigned long start, unsigned long end) ...@@ -1178,7 +1178,7 @@ static void unmap_pmd_range(pud_t *pud, unsigned long start, unsigned long end)
* Try again to free the PMD page if haven't succeeded above. * Try again to free the PMD page if haven't succeeded above.
*/ */
if (!pud_none(*pud)) if (!pud_none(*pud))
if (try_to_free_pmd_page((pmd_t *)pud_page_vaddr(*pud))) if (try_to_free_pmd_page(pud_pgtable(*pud)))
pud_clear(pud); pud_clear(pud);
} }
......
...@@ -801,7 +801,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) ...@@ -801,7 +801,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr)
pte_t *pte; pte_t *pte;
int i; int i;
pmd = (pmd_t *)pud_page_vaddr(*pud); pmd = pud_pgtable(*pud);
pmd_sv = (pmd_t *)__get_free_page(GFP_KERNEL); pmd_sv = (pmd_t *)__get_free_page(GFP_KERNEL);
if (!pmd_sv) if (!pmd_sv)
return 0; return 0;
......
...@@ -51,7 +51,7 @@ static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address) ...@@ -51,7 +51,7 @@ static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
#define __pmd(x) ((pmd_t) { __pud(x) } ) #define __pmd(x) ((pmd_t) { __pud(x) } )
#define pud_page(pud) (pmd_page((pmd_t){ pud })) #define pud_page(pud) (pmd_page((pmd_t){ pud }))
#define pud_page_vaddr(pud) (pmd_page_vaddr((pmd_t){ pud })) #define pud_pgtable(pud) ((pmd_t *)(pmd_page_vaddr((pmd_t){ pud })))
/* /*
* allocating and freeing a pmd is trivial: the 1-entry pmd is * allocating and freeing a pmd is trivial: the 1-entry pmd is
......
...@@ -49,7 +49,7 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address) ...@@ -49,7 +49,7 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
#define __pud(x) ((pud_t) { __p4d(x) }) #define __pud(x) ((pud_t) { __p4d(x) })
#define p4d_page(p4d) (pud_page((pud_t){ p4d })) #define p4d_page(p4d) (pud_page((pud_t){ p4d }))
#define p4d_page_vaddr(p4d) (pud_page_vaddr((pud_t){ p4d })) #define p4d_page_vaddr(p4d) (pud_pgtable((pud_t){ p4d }))
/* /*
* allocating and freeing a pud is trivial: the 1-entry pud is * allocating and freeing a pud is trivial: the 1-entry pud is
......
...@@ -106,7 +106,7 @@ static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address) ...@@ -106,7 +106,7 @@ static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
#ifndef pmd_offset #ifndef pmd_offset
static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address) static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
{ {
return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(address); return pud_pgtable(*pud) + pmd_index(address);
} }
#define pmd_offset pmd_offset #define pmd_offset pmd_offset
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment