diff options
Diffstat (limited to 'include/asm-m68k')
-rw-r--r-- | include/asm-m68k/motorola_pgalloc.h | 14 | ||||
-rw-r--r-- | include/asm-m68k/page.h | 1 | ||||
-rw-r--r-- | include/asm-m68k/sun3_pgalloc.h | 17 |
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 @@ | |||
7 | extern pmd_t *get_pointer_table(void); | 7 | extern pmd_t *get_pointer_table(void); |
8 | extern int free_pointer_table(pmd_t *); | 8 | extern int free_pointer_table(pmd_t *); |
9 | 9 | ||
10 | |||
11 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | 10 | static 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 | ||
31 | static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) | 30 | static 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 | ||
50 | static inline void pte_free(struct mm_struct *mm, struct page *page) | 49 | static 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 | ||
57 | static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *page) | 57 | static 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 | ||
97 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) | 98 | static 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 | ||
102 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | 104 | static 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; | |||
91 | typedef struct { unsigned long pmd[16]; } pmd_t; | 91 | typedef struct { unsigned long pmd[16]; } pmd_t; |
92 | typedef struct { unsigned long pgd; } pgd_t; | 92 | typedef struct { unsigned long pgd; } pgd_t; |
93 | typedef struct { unsigned long pgprot; } pgprot_t; | 93 | typedef struct { unsigned long pgprot; } pgprot_t; |
94 | typedef 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 | ||
29 | static inline void pte_free(struct mm_struct *mm, struct page *page) | 29 | static 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) \ |
36 | do { \ | ||
37 | pgtable_page_dtor(pte); \ | ||
38 | tlb_remove_page((tlb), pte); \ | ||
39 | } while (0) | ||
35 | 40 | ||
36 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 41 | static 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 | ||
48 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 53 | static 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 | ||
66 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page) | 72 | static 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 |