| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) | 
|  | 3 | * Copyright 2003 PathScale, Inc. | 
|  | 4 | * Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h | 
|  | 5 | * Licensed under the GPL | 
|  | 6 | */ | 
|  | 7 |  | 
|  | 8 | #ifndef __UM_PGALLOC_H | 
|  | 9 | #define __UM_PGALLOC_H | 
|  | 10 |  | 
|  | 11 | #include "linux/config.h" | 
|  | 12 | #include "linux/mm.h" | 
|  | 13 | #include "asm/fixmap.h" | 
|  | 14 |  | 
|  | 15 | #define pmd_populate_kernel(mm, pmd, pte) \ | 
|  | 16 | set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte))) | 
|  | 17 |  | 
|  | 18 | #define pmd_populate(mm, pmd, pte) 				\ | 
|  | 19 | set_pmd(pmd, __pmd(_PAGE_TABLE +			\ | 
|  | 20 | ((unsigned long long)page_to_pfn(pte) <<	\ | 
|  | 21 | (unsigned long long) PAGE_SHIFT))) | 
|  | 22 |  | 
|  | 23 | /* | 
|  | 24 | * Allocate and free page tables. | 
|  | 25 | */ | 
|  | 26 | extern pgd_t *pgd_alloc(struct mm_struct *); | 
|  | 27 | extern void pgd_free(pgd_t *pgd); | 
|  | 28 |  | 
|  | 29 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); | 
|  | 30 | extern struct page *pte_alloc_one(struct mm_struct *, unsigned long); | 
|  | 31 |  | 
|  | 32 | static inline void pte_free_kernel(pte_t *pte) | 
|  | 33 | { | 
|  | 34 | free_page((unsigned long) pte); | 
|  | 35 | } | 
|  | 36 |  | 
|  | 37 | static inline void pte_free(struct page *pte) | 
|  | 38 | { | 
|  | 39 | __free_page(pte); | 
|  | 40 | } | 
|  | 41 |  | 
|  | 42 | #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) | 
|  | 43 |  | 
|  | 44 | #ifdef CONFIG_3_LEVEL_PGTABLES | 
| Jeff Dike | 7ef9390 | 2005-09-03 15:57:52 -0700 | [diff] [blame] | 45 |  | 
|  | 46 | extern __inline__ void pmd_free(pmd_t *pmd) | 
|  | 47 | { | 
|  | 48 | free_page((unsigned long)pmd); | 
|  | 49 | } | 
|  | 50 |  | 
|  | 51 | #define __pmd_free_tlb(tlb,x)   tlb_remove_page((tlb),virt_to_page(x)) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 52 | #endif | 
|  | 53 |  | 
|  | 54 | #define check_pgt_cache()	do { } while (0) | 
|  | 55 |  | 
|  | 56 | #endif | 
|  | 57 |  | 
|  | 58 | /* | 
|  | 59 | * Overrides for Emacs so that we follow Linus's tabbing style. | 
|  | 60 | * Emacs will notice this stuff at the end of the file and automatically | 
|  | 61 | * adjust the settings for this buffer only.  This must remain at the end | 
|  | 62 | * of the file. | 
|  | 63 | * --------------------------------------------------------------------------- | 
|  | 64 | * Local variables: | 
|  | 65 | * c-file-style: "linux" | 
|  | 66 | * End: | 
|  | 67 | */ |