diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2014-07-21 09:52:49 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2014-07-23 10:28:10 -0400 |
commit | 7078db46215f9137801a122f87ac31c504220a94 (patch) | |
tree | 9e244e9190eb891bf2452037712d4210d4c1255a | |
parent | 08375198b01001c0e43bdd580104b16b019a3754 (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.h | 57 |
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); | |||
54 | extern void __pud_error(const char *file, int line, unsigned long val); | 54 | extern void __pud_error(const char *file, int line, unsigned long val); |
55 | extern void __pgd_error(const char *file, int line, unsigned long val); | 55 | extern 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); | |||
123 | extern struct page *empty_zero_page; | 114 | extern 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 | |||
361 | static 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 | |||
395 | static 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)) | ||
395 | static 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)) | ||
404 | static 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 | |||
413 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 412 | static 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 | |