aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-m68k
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-m68k')
-rw-r--r--include/asm-m68k/motorola_pgalloc.h14
-rw-r--r--include/asm-m68k/page.h1
-rw-r--r--include/asm-m68k/sun3_pgalloc.h17
3 files changed, 21 insertions, 11 deletions
diff --git a/include/asm-m68k/motorola_pgalloc.h b/include/asm-m68k/motorola_pgalloc.h
index 500ec9b8b189..d08bf6261df8 100644
--- a/include/asm-m68k/motorola_pgalloc.h
+++ b/include/asm-m68k/motorola_pgalloc.h
@@ -7,7 +7,6 @@
7extern pmd_t *get_pointer_table(void); 7extern pmd_t *get_pointer_table(void);
8extern int free_pointer_table(pmd_t *); 8extern int free_pointer_table(pmd_t *);
9 9
10
11static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 10static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
12{ 11{
13 pte_t *pte; 12 pte_t *pte;
@@ -28,7 +27,7 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
28 free_page((unsigned long) pte); 27 free_page((unsigned long) pte);
29} 28}
30 29
31static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) 30static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
32{ 31{
33 struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); 32 struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
34 pte_t *pte; 33 pte_t *pte;
@@ -43,19 +42,21 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long add
43 nocache_page(pte); 42 nocache_page(pte);
44 } 43 }
45 kunmap(pte); 44 kunmap(pte);
46 45 pgtable_page_ctor(page);
47 return page; 46 return page;
48} 47}
49 48
50static inline void pte_free(struct mm_struct *mm, struct page *page) 49static inline void pte_free(struct mm_struct *mm, pgtable_t page)
51{ 50{
51 pgtable_page_dtor(page);
52 cache_page(kmap(page)); 52 cache_page(kmap(page));
53 kunmap(page); 53 kunmap(page);
54 __free_page(page); 54 __free_page(page);
55} 55}
56 56
57static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *page) 57static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page)
58{ 58{
59 pgtable_page_dtor(page);
59 cache_page(kmap(page)); 60 cache_page(kmap(page));
60 kunmap(page); 61 kunmap(page);
61 __free_page(page); 62 __free_page(page);
@@ -94,10 +95,11 @@ static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *
94 pmd_set(pmd, pte); 95 pmd_set(pmd, pte);
95} 96}
96 97
97static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) 98static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
98{ 99{
99 pmd_set(pmd, page_address(page)); 100 pmd_set(pmd, page_address(page));
100} 101}
102#define pmd_pgtable(pmd) pmd_page(pmd)
101 103
102static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) 104static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
103{ 105{
diff --git a/include/asm-m68k/page.h b/include/asm-m68k/page.h
index 3f29e2a03a43..880c2cbff8a6 100644
--- a/include/asm-m68k/page.h
+++ b/include/asm-m68k/page.h
@@ -91,6 +91,7 @@ typedef struct { unsigned long pte; } pte_t;
91typedef struct { unsigned long pmd[16]; } pmd_t; 91typedef struct { unsigned long pmd[16]; } pmd_t;
92typedef struct { unsigned long pgd; } pgd_t; 92typedef struct { unsigned long pgd; } pgd_t;
93typedef struct { unsigned long pgprot; } pgprot_t; 93typedef struct { unsigned long pgprot; } pgprot_t;
94typedef struct page *pgtable_t;
94 95
95#define pte_val(x) ((x).pte) 96#define pte_val(x) ((x).pte)
96#define pmd_val(x) ((&x)->pmd[0]) 97#define pmd_val(x) ((&x)->pmd[0])
diff --git a/include/asm-m68k/sun3_pgalloc.h b/include/asm-m68k/sun3_pgalloc.h
index a5a91e72714b..d4c83f143816 100644
--- a/include/asm-m68k/sun3_pgalloc.h
+++ b/include/asm-m68k/sun3_pgalloc.h
@@ -26,12 +26,17 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
26 free_page((unsigned long) pte); 26 free_page((unsigned long) pte);
27} 27}
28 28
29static inline void pte_free(struct mm_struct *mm, struct page *page) 29static inline void pte_free(struct mm_struct *mm, pgtable_t page)
30{ 30{
31 pgtable_page_dtor(page);
31 __free_page(page); 32 __free_page(page);
32} 33}
33 34
34#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) 35#define __pte_free_tlb(tlb,pte) \
36do { \
37 pgtable_page_dtor(pte); \
38 tlb_remove_page((tlb), pte); \
39} while (0)
35 40
36static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 41static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
37 unsigned long address) 42 unsigned long address)
@@ -45,8 +50,8 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
45 return (pte_t *) (page); 50 return (pte_t *) (page);
46} 51}
47 52
48static inline struct page *pte_alloc_one(struct mm_struct *mm, 53static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
49 unsigned long address) 54 unsigned long address)
50{ 55{
51 struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); 56 struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
52 57
@@ -54,6 +59,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
54 return NULL; 59 return NULL;
55 60
56 clear_highpage(page); 61 clear_highpage(page);
62 pgtable_page_ctor(page);
57 return page; 63 return page;
58 64
59} 65}
@@ -63,10 +69,11 @@ static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *
63 pmd_val(*pmd) = __pa((unsigned long)pte); 69 pmd_val(*pmd) = __pa((unsigned long)pte);
64} 70}
65 71
66static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) 72static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
67{ 73{
68 pmd_val(*pmd) = __pa((unsigned long)page_address(page)); 74 pmd_val(*pmd) = __pa((unsigned long)page_address(page));
69} 75}
76#define pmd_pgtable(pmd) pmd_page(pmd)
70 77
71/* 78/*
72 * allocating and freeing a pmd is trivial: the 1-entry pmd is 79 * allocating and freeing a pmd is trivial: the 1-entry pmd is