aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2015-08-27 23:09:57 -0400
committerVineet Gupta <vgupta@synopsys.com>2015-10-09 07:34:22 -0400
commite8a75963a4b9433dca55286e222f4dd1cc1ca76c (patch)
tree2621e0ee34caa568d0e7a3b8b6a555f1002183e5
parent049e6dde7e57f0054fdc49102e7ef4830c698b46 (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.h4
-rw-r--r--arch/arc/include/asm/pgalloc.h6
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 {
43typedef struct { 43typedef struct {
44 unsigned long pgprot; 44 unsigned long pgprot;
45} pgprot_t; 45} pgprot_t;
46typedef 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;
60typedef unsigned long pte_t; 59typedef unsigned long pte_t;
61typedef unsigned long pgd_t; 60typedef unsigned long pgd_t;
62typedef unsigned long pgprot_t; 61typedef unsigned long pgprot_t;
63typedef 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
72typedef 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)
128static inline void pte_free(struct mm_struct *mm, pgtable_t ptep) 128static 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 */