aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2014-07-21 09:52:49 -0400
committerCatalin Marinas <catalin.marinas@arm.com>2014-07-23 10:28:10 -0400
commit7078db46215f9137801a122f87ac31c504220a94 (patch)
tree9e244e9190eb891bf2452037712d4210d4c1255a
parent08375198b01001c0e43bdd580104b16b019a3754 (diff)
arm64: asm/pgtable.h pmd/pud definitions clean-up
Non-functional change to group together the pmd/pud definitions and reduce the amount of #if CONFIG_ARM64_PGTABLE_LEVELS. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Jungseok Lee <jungseoklee85@gmail.com>
-rw-r--r--arch/arm64/include/asm/pgtable.h57
1 files changed, 28 insertions, 29 deletions
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index ec82789d03c3..73968c2180aa 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -54,15 +54,6 @@ extern void __pmd_error(const char *file, int line, unsigned long val);
54extern void __pud_error(const char *file, int line, unsigned long val); 54extern void __pud_error(const char *file, int line, unsigned long val);
55extern void __pgd_error(const char *file, int line, unsigned long val); 55extern void __pgd_error(const char *file, int line, unsigned long val);
56 56
57#define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte_val(pte))
58#if CONFIG_ARM64_PGTABLE_LEVELS > 2
59#define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd_val(pmd))
60#endif
61#if CONFIG_ARM64_PGTABLE_LEVELS > 3
62#define pud_ERROR(pud) __pud_error(__FILE__, __LINE__, pud_val(pud))
63#endif
64#define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd))
65
66#ifdef CONFIG_SMP 57#ifdef CONFIG_SMP
67#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED) 58#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
68#define PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S) 59#define PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)
@@ -123,6 +114,8 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
123extern struct page *empty_zero_page; 114extern struct page *empty_zero_page;
124#define ZERO_PAGE(vaddr) (empty_zero_page) 115#define ZERO_PAGE(vaddr) (empty_zero_page)
125 116
117#define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte_val(pte))
118
126#define pte_pfn(pte) ((pte_val(pte) & PHYS_MASK) >> PAGE_SHIFT) 119#define pte_pfn(pte) ((pte_val(pte) & PHYS_MASK) >> PAGE_SHIFT)
127 120
128#define pfn_pte(pfn,prot) (__pte(((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))) 121#define pfn_pte(pfn,prot) (__pte(((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot)))
@@ -130,6 +123,10 @@ extern struct page *empty_zero_page;
130#define pte_none(pte) (!pte_val(pte)) 123#define pte_none(pte) (!pte_val(pte))
131#define pte_clear(mm,addr,ptep) set_pte(ptep, __pte(0)) 124#define pte_clear(mm,addr,ptep) set_pte(ptep, __pte(0))
132#define pte_page(pte) (pfn_to_page(pte_pfn(pte))) 125#define pte_page(pte) (pfn_to_page(pte_pfn(pte)))
126
127/* Find an entry in the third-level page table. */
128#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
129
133#define pte_offset_kernel(dir,addr) (pmd_page_vaddr(*(dir)) + pte_index(addr)) 130#define pte_offset_kernel(dir,addr) (pmd_page_vaddr(*(dir)) + pte_index(addr))
134 131
135#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr)) 132#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
@@ -336,6 +333,8 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
336 333
337#if CONFIG_ARM64_PGTABLE_LEVELS > 2 334#if CONFIG_ARM64_PGTABLE_LEVELS > 2
338 335
336#define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd_val(pmd))
337
339#define pud_none(pud) (!pud_val(pud)) 338#define pud_none(pud) (!pud_val(pud))
340#define pud_bad(pud) (!(pud_val(pud) & 2)) 339#define pud_bad(pud) (!(pud_val(pud) & 2))
341#define pud_present(pud) (pud_val(pud)) 340#define pud_present(pud) (pud_val(pud))
@@ -356,10 +355,20 @@ static inline pmd_t *pud_page_vaddr(pud_t pud)
356 return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK); 355 return __va(pud_val(pud) & PHYS_MASK & (s32)PAGE_MASK);
357} 356}
358 357
358/* Find an entry in the second-level page table. */
359#define pmd_index(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
360
361static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
362{
363 return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(addr);
364}
365
359#endif /* CONFIG_ARM64_PGTABLE_LEVELS > 2 */ 366#endif /* CONFIG_ARM64_PGTABLE_LEVELS > 2 */
360 367
361#if CONFIG_ARM64_PGTABLE_LEVELS > 3 368#if CONFIG_ARM64_PGTABLE_LEVELS > 3
362 369
370#define pud_ERROR(pud) __pud_error(__FILE__, __LINE__, pud_val(pud))
371
363#define pgd_none(pgd) (!pgd_val(pgd)) 372#define pgd_none(pgd) (!pgd_val(pgd))
364#define pgd_bad(pgd) (!(pgd_val(pgd) & 2)) 373#define pgd_bad(pgd) (!(pgd_val(pgd) & 2))
365#define pgd_present(pgd) (pgd_val(pgd)) 374#define pgd_present(pgd) (pgd_val(pgd))
@@ -380,8 +389,18 @@ static inline pud_t *pgd_page_vaddr(pgd_t pgd)
380 return __va(pgd_val(pgd) & PHYS_MASK & (s32)PAGE_MASK); 389 return __va(pgd_val(pgd) & PHYS_MASK & (s32)PAGE_MASK);
381} 390}
382 391
392/* Find an entry in the frst-level page table. */
393#define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
394
395static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
396{
397 return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(addr);
398}
399
383#endif /* CONFIG_ARM64_PGTABLE_LEVELS > 3 */ 400#endif /* CONFIG_ARM64_PGTABLE_LEVELS > 3 */
384 401
402#define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd))
403
385/* to find an entry in a page-table-directory */ 404/* to find an entry in a page-table-directory */
386#define pgd_index(addr) (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)) 405#define pgd_index(addr) (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
387 406
@@ -390,26 +409,6 @@ static inline pud_t *pgd_page_vaddr(pgd_t pgd)
390/* to find an entry in a kernel page-table-directory */ 409/* to find an entry in a kernel page-table-directory */
391#define pgd_offset_k(addr) pgd_offset(&init_mm, addr) 410#define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
392 411
393#if CONFIG_ARM64_PGTABLE_LEVELS > 3
394#define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
395static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
396{
397 return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(addr);
398}
399#endif
400
401/* Find an entry in the second-level page table.. */
402#if CONFIG_ARM64_PGTABLE_LEVELS > 2
403#define pmd_index(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
404static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
405{
406 return (pmd_t *)pud_page_vaddr(*pud) + pmd_index(addr);
407}
408#endif
409
410/* Find an entry in the third-level page table.. */
411#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
412
413static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 412static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
414{ 413{
415 const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | 414 const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |