Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _CRIS_PGALLOC_H |
2 | #define _CRIS_PGALLOC_H | |
3 | ||
4 | #include <linux/threads.h> | |
5 | #include <linux/mm.h> | |
6 | ||
7 | #define pmd_populate_kernel(mm, pmd, pte) pmd_set(pmd, pte) | |
8 | #define pmd_populate(mm, pmd, pte) pmd_set(pmd, page_address(pte)) | |
2f569afd | 9 | #define pmd_pgtable(pmd) pmd_page(pmd) |
1da177e4 LT |
10 | |
11 | /* | |
12 | * Allocate and free page tables. | |
13 | */ | |
14 | ||
d9b5444e | 15 | static inline pgd_t *pgd_alloc (struct mm_struct *mm) |
1da177e4 LT |
16 | { |
17 | return (pgd_t *)get_zeroed_page(GFP_KERNEL); | |
18 | } | |
19 | ||
5e541973 | 20 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) |
1da177e4 LT |
21 | { |
22 | free_page((unsigned long)pgd); | |
23 | } | |
24 | ||
d9b5444e | 25 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) |
1da177e4 LT |
26 | { |
27 | pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); | |
28 | return pte; | |
29 | } | |
30 | ||
2f569afd | 31 | static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) |
1da177e4 LT |
32 | { |
33 | struct page *pte; | |
34 | pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); | |
2f569afd | 35 | pgtable_page_ctor(pte); |
1da177e4 LT |
36 | return pte; |
37 | } | |
38 | ||
5e541973 | 39 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
1da177e4 LT |
40 | { |
41 | free_page((unsigned long)pte); | |
42 | } | |
43 | ||
2f569afd | 44 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) |
1da177e4 | 45 | { |
2f569afd | 46 | pgtable_page_dtor(pte); |
1da177e4 LT |
47 | __free_page(pte); |
48 | } | |
49 | ||
2f569afd MS |
50 | #define __pte_free_tlb(tlb,pte) \ |
51 | do { \ | |
52 | pgtable_page_dtor(pte); \ | |
53 | tlb_remove_page((tlb), pte); \ | |
54 | } while (0) | |
1da177e4 | 55 | |
1da177e4 LT |
56 | #define check_pgt_cache() do { } while (0) |
57 | ||
58 | #endif |