Linux-2.6.12-rc2
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / asm-alpha / pgalloc.h
1 #ifndef _ALPHA_PGALLOC_H
2 #define _ALPHA_PGALLOC_H
3
4 #include <linux/config.h>
5 #include <linux/mm.h>
6 #include <linux/mmzone.h>
7
8 /*
9 * Allocate and free page tables. The xxx_kernel() versions are
10 * used to allocate a kernel page table - this turns on ASN bits
11 * if any.
12 */
13
14 static inline void
15 pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
16 {
17 pmd_set(pmd, (pte_t *)(page_to_pa(pte) + PAGE_OFFSET));
18 }
19
20 static inline void
21 pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
22 {
23 pmd_set(pmd, pte);
24 }
25
26 static inline void
27 pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
28 {
29 pgd_set(pgd, pmd);
30 }
31
32 extern pgd_t *pgd_alloc(struct mm_struct *mm);
33
34 static inline void
35 pgd_free(pgd_t *pgd)
36 {
37 free_page((unsigned long)pgd);
38 }
39
40 static inline pmd_t *
41 pmd_alloc_one(struct mm_struct *mm, unsigned long address)
42 {
43 pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
44 return ret;
45 }
46
47 static inline void
48 pmd_free(pmd_t *pmd)
49 {
50 free_page((unsigned long)pmd);
51 }
52
53 extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr);
54
55 static inline void
56 pte_free_kernel(pte_t *pte)
57 {
58 free_page((unsigned long)pte);
59 }
60
61 static inline struct page *
62 pte_alloc_one(struct mm_struct *mm, unsigned long addr)
63 {
64 pte_t *pte = pte_alloc_one_kernel(mm, addr);
65 if (pte)
66 return virt_to_page(pte);
67 return NULL;
68 }
69
70 static inline void
71 pte_free(struct page *page)
72 {
73 __free_page(page);
74 }
75
76 #define check_pgt_cache() do { } while (0)
77
78 #endif /* _ALPHA_PGALLOC_H */