diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2015-08-27 23:09:57 -0400 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2015-10-09 07:34:22 -0400 |
commit | e8a75963a4b9433dca55286e222f4dd1cc1ca76c (patch) | |
tree | 2621e0ee34caa568d0e7a3b8b6a555f1002183e5 | |
parent | 049e6dde7e57f0054fdc49102e7ef4830c698b46 (diff) |
ARC: mm: switch pgtable_to to pte_t *
ARC is the only arch with unsigned long type (vs. struct page *).
Historically this was done to avoid the page_address() calls in various
arch hooks which need to get the virtual/logical address of the table.
Some arches alternately define it as pte_t *, and is as efficient as
unsigned long (generated code doesn't change)
Suggested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
-rw-r--r-- | arch/arc/include/asm/page.h | 4 | ||||
-rw-r--r-- | arch/arc/include/asm/pgalloc.h | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h index 9c8aa41e45c2..2994cac1069e 100644 --- a/arch/arc/include/asm/page.h +++ b/arch/arc/include/asm/page.h | |||
@@ -43,7 +43,6 @@ typedef struct { | |||
43 | typedef struct { | 43 | typedef struct { |
44 | unsigned long pgprot; | 44 | unsigned long pgprot; |
45 | } pgprot_t; | 45 | } pgprot_t; |
46 | typedef unsigned long pgtable_t; | ||
47 | 46 | ||
48 | #define pte_val(x) ((x).pte) | 47 | #define pte_val(x) ((x).pte) |
49 | #define pgd_val(x) ((x).pgd) | 48 | #define pgd_val(x) ((x).pgd) |
@@ -60,7 +59,6 @@ typedef unsigned long pgtable_t; | |||
60 | typedef unsigned long pte_t; | 59 | typedef unsigned long pte_t; |
61 | typedef unsigned long pgd_t; | 60 | typedef unsigned long pgd_t; |
62 | typedef unsigned long pgprot_t; | 61 | typedef unsigned long pgprot_t; |
63 | typedef unsigned long pgtable_t; | ||
64 | 62 | ||
65 | #define pte_val(x) (x) | 63 | #define pte_val(x) (x) |
66 | #define pgd_val(x) (x) | 64 | #define pgd_val(x) (x) |
@@ -71,6 +69,8 @@ typedef unsigned long pgtable_t; | |||
71 | 69 | ||
72 | #endif | 70 | #endif |
73 | 71 | ||
72 | typedef pte_t * pgtable_t; | ||
73 | |||
74 | #define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT) | 74 | #define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT) |
75 | 75 | ||
76 | #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) | 76 | #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) |
diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h index 81208bfd9dcb..9149b5ca26d7 100644 --- a/arch/arc/include/asm/pgalloc.h +++ b/arch/arc/include/asm/pgalloc.h | |||
@@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address) | |||
107 | pgtable_t pte_pg; | 107 | pgtable_t pte_pg; |
108 | struct page *page; | 108 | struct page *page; |
109 | 109 | ||
110 | pte_pg = __get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte()); | 110 | pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte()); |
111 | if (!pte_pg) | 111 | if (!pte_pg) |
112 | return 0; | 112 | return 0; |
113 | memzero((void *)pte_pg, PTRS_PER_PTE * 4); | 113 | memzero((void *)pte_pg, PTRS_PER_PTE * 4); |
@@ -128,12 +128,12 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | |||
128 | static inline void pte_free(struct mm_struct *mm, pgtable_t ptep) | 128 | static inline void pte_free(struct mm_struct *mm, pgtable_t ptep) |
129 | { | 129 | { |
130 | pgtable_page_dtor(virt_to_page(ptep)); | 130 | pgtable_page_dtor(virt_to_page(ptep)); |
131 | free_pages(ptep, __get_order_pte()); | 131 | free_pages((unsigned long)ptep, __get_order_pte()); |
132 | } | 132 | } |
133 | 133 | ||
134 | #define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte) | 134 | #define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte) |
135 | 135 | ||
136 | #define check_pgt_cache() do { } while (0) | 136 | #define check_pgt_cache() do { } while (0) |
137 | #define pmd_pgtable(pmd) pmd_page_vaddr(pmd) | 137 | #define pmd_pgtable(pmd) ((pgtable_t) pmd_page_vaddr(pmd)) |
138 | 138 | ||
139 | #endif /* _ASM_ARC_PGALLOC_H */ | 139 | #endif /* _ASM_ARC_PGALLOC_H */ |