blob: deaddfe79bbcd6527f968bc6bc3c4c1087e11440 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#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))
9
10/*
11 * Allocate and free page tables.
12 */
13
Adrian Bunkd9b54442005-11-07 00:58:44 -080014static inline pgd_t *pgd_alloc (struct mm_struct *mm)
Linus Torvalds1da177e2005-04-16 15:20:36 -070015{
16 return (pgd_t *)get_zeroed_page(GFP_KERNEL);
17}
18
Adrian Bunkd9b54442005-11-07 00:58:44 -080019static inline void pgd_free (pgd_t *pgd)
Linus Torvalds1da177e2005-04-16 15:20:36 -070020{
21 free_page((unsigned long)pgd);
22}
23
Adrian Bunkd9b54442005-11-07 00:58:44 -080024static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
Linus Torvalds1da177e2005-04-16 15:20:36 -070025{
26 pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
27 return pte;
28}
29
Adrian Bunkd9b54442005-11-07 00:58:44 -080030static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
Linus Torvalds1da177e2005-04-16 15:20:36 -070031{
32 struct page *pte;
33 pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
34 return pte;
35}
36
Adrian Bunkd9b54442005-11-07 00:58:44 -080037static inline void pte_free_kernel(pte_t *pte)
Linus Torvalds1da177e2005-04-16 15:20:36 -070038{
39 free_page((unsigned long)pte);
40}
41
Adrian Bunkd9b54442005-11-07 00:58:44 -080042static inline void pte_free(struct page *pte)
Linus Torvalds1da177e2005-04-16 15:20:36 -070043{
44 __free_page(pte);
45}
46
47
48#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
49
Linus Torvalds1da177e2005-04-16 15:20:36 -070050#define check_pgt_cache() do { } while (0)
51
52#endif