Commit e8a75963 authored by Vineet Gupta's avatar Vineet Gupta

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: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 049e6dde
...@@ -43,7 +43,6 @@ typedef struct { ...@@ -43,7 +43,6 @@ typedef struct {
typedef struct { typedef struct {
unsigned long pgprot; unsigned long pgprot;
} pgprot_t; } pgprot_t;
typedef unsigned long pgtable_t;
#define pte_val(x) ((x).pte) #define pte_val(x) ((x).pte)
#define pgd_val(x) ((x).pgd) #define pgd_val(x) ((x).pgd)
...@@ -60,7 +59,6 @@ typedef unsigned long pgtable_t; ...@@ -60,7 +59,6 @@ typedef unsigned long pgtable_t;
typedef unsigned long pte_t; typedef unsigned long pte_t;
typedef unsigned long pgd_t; typedef unsigned long pgd_t;
typedef unsigned long pgprot_t; typedef unsigned long pgprot_t;
typedef unsigned long pgtable_t;
#define pte_val(x) (x) #define pte_val(x) (x)
#define pgd_val(x) (x) #define pgd_val(x) (x)
...@@ -71,6 +69,8 @@ typedef unsigned long pgtable_t; ...@@ -71,6 +69,8 @@ typedef unsigned long pgtable_t;
#endif #endif
typedef pte_t * pgtable_t;
#define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT) #define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT)
#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
......
...@@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address) ...@@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
pgtable_t pte_pg; pgtable_t pte_pg;
struct page *page; struct page *page;
pte_pg = __get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte()); pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte());
if (!pte_pg) if (!pte_pg)
return 0; return 0;
memzero((void *)pte_pg, PTRS_PER_PTE * 4); 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,12 +128,12 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
static inline void pte_free(struct mm_struct *mm, pgtable_t ptep) static inline void pte_free(struct mm_struct *mm, pgtable_t ptep)
{ {
pgtable_page_dtor(virt_to_page(ptep)); pgtable_page_dtor(virt_to_page(ptep));
free_pages(ptep, __get_order_pte()); free_pages((unsigned long)ptep, __get_order_pte());
} }
#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte) #define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte)
#define check_pgt_cache() do { } while (0) #define check_pgt_cache() do { } while (0)
#define pmd_pgtable(pmd) pmd_page_vaddr(pmd) #define pmd_pgtable(pmd) ((pgtable_t) pmd_page_vaddr(pmd))
#endif /* _ASM_ARC_PGALLOC_H */ #endif /* _ASM_ARC_PGALLOC_H */
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