diff options
Diffstat (limited to 'include/asm-m68k/sun3_pgalloc.h')
-rw-r--r-- | include/asm-m68k/sun3_pgalloc.h | 17 |
1 files changed, 12 insertions, 5 deletions
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 |