diff options
-rw-r--r-- | arch/x86/mm/init_64.c | 6 | ||||
-rw-r--r-- | arch/x86/mm/pgtable.c | 7 | ||||
-rw-r--r-- | arch/x86/mm/pgtable_32.c | 7 | ||||
-rw-r--r-- | include/asm-x86/pgalloc.h | 16 | ||||
-rw-r--r-- | include/asm-x86/pgalloc_32.h | 18 | ||||
-rw-r--r-- | include/asm-x86/pgalloc_64.h | 16 |
6 files changed, 23 insertions, 47 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 2d89b7abbc54..9c09893e54fb 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -662,12 +662,6 @@ int memory_add_physaddr_to_nid(u64 start) | |||
662 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); | 662 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); |
663 | #endif | 663 | #endif |
664 | 664 | ||
665 | void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte) | ||
666 | { | ||
667 | pgtable_page_dtor(pte); | ||
668 | tlb_remove_page(tlb, pte); | ||
669 | } | ||
670 | |||
671 | void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) | 665 | void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) |
672 | { | 666 | { |
673 | tlb_remove_page(tlb, virt_to_page(pmd)); | 667 | tlb_remove_page(tlb, virt_to_page(pmd)); |
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index ed16b7704a3c..83765328e265 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c | |||
@@ -21,6 +21,13 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) | |||
21 | return pte; | 21 | return pte; |
22 | } | 22 | } |
23 | 23 | ||
24 | void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte) | ||
25 | { | ||
26 | pgtable_page_dtor(pte); | ||
27 | paravirt_release_pt(page_to_pfn(pte)); | ||
28 | tlb_remove_page(tlb, pte); | ||
29 | } | ||
30 | |||
24 | #ifdef CONFIG_X86_64 | 31 | #ifdef CONFIG_X86_64 |
25 | static inline void pgd_list_add(pgd_t *pgd) | 32 | static inline void pgd_list_add(pgd_t *pgd) |
26 | { | 33 | { |
diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c index b46893e45d02..b9e3dac32391 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c | |||
@@ -173,13 +173,6 @@ void reserve_top_address(unsigned long reserve) | |||
173 | __VMALLOC_RESERVE += reserve; | 173 | __VMALLOC_RESERVE += reserve; |
174 | } | 174 | } |
175 | 175 | ||
176 | void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte) | ||
177 | { | ||
178 | pgtable_page_dtor(pte); | ||
179 | paravirt_release_pt(page_to_pfn(pte)); | ||
180 | tlb_remove_page(tlb, pte); | ||
181 | } | ||
182 | |||
183 | #ifdef CONFIG_X86_PAE | 176 | #ifdef CONFIG_X86_PAE |
184 | 177 | ||
185 | void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) | 178 | void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) |
diff --git a/include/asm-x86/pgalloc.h b/include/asm-x86/pgalloc.h index 28773594f741..0d15e21eefec 100644 --- a/include/asm-x86/pgalloc.h +++ b/include/asm-x86/pgalloc.h | |||
@@ -24,6 +24,22 @@ extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); | |||
24 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); | 24 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); |
25 | extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); | 25 | extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); |
26 | 26 | ||
27 | /* Should really implement gc for free page table pages. This could be | ||
28 | done with a reference count in struct page. */ | ||
29 | |||
30 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
31 | { | ||
32 | BUG_ON((unsigned long)pte & (PAGE_SIZE-1)); | ||
33 | free_page((unsigned long)pte); | ||
34 | } | ||
35 | |||
36 | static inline void pte_free(struct mm_struct *mm, struct page *pte) | ||
37 | { | ||
38 | __free_page(pte); | ||
39 | } | ||
40 | |||
41 | extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte); | ||
42 | |||
27 | #ifdef CONFIG_X86_32 | 43 | #ifdef CONFIG_X86_32 |
28 | # include "pgalloc_32.h" | 44 | # include "pgalloc_32.h" |
29 | #else | 45 | #else |
diff --git a/include/asm-x86/pgalloc_32.h b/include/asm-x86/pgalloc_32.h index c4e7faa89616..96a09f566155 100644 --- a/include/asm-x86/pgalloc_32.h +++ b/include/asm-x86/pgalloc_32.h | |||
@@ -17,24 +17,6 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *p | |||
17 | } | 17 | } |
18 | #define pmd_pgtable(pmd) pmd_page(pmd) | 18 | #define pmd_pgtable(pmd) pmd_page(pmd) |
19 | 19 | ||
20 | /* | ||
21 | * Allocate and free page tables. | ||
22 | */ | ||
23 | |||
24 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
25 | { | ||
26 | free_page((unsigned long)pte); | ||
27 | } | ||
28 | |||
29 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) | ||
30 | { | ||
31 | pgtable_page_dtor(pte); | ||
32 | __free_page(pte); | ||
33 | } | ||
34 | |||
35 | |||
36 | extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte); | ||
37 | |||
38 | #ifdef CONFIG_X86_PAE | 20 | #ifdef CONFIG_X86_PAE |
39 | /* | 21 | /* |
40 | * In the PAE case we free the pmds as part of the pgd. | 22 | * In the PAE case we free the pmds as part of the pgd. |
diff --git a/include/asm-x86/pgalloc_64.h b/include/asm-x86/pgalloc_64.h index 23f87501ac26..fc3414d3ed04 100644 --- a/include/asm-x86/pgalloc_64.h +++ b/include/asm-x86/pgalloc_64.h | |||
@@ -47,22 +47,6 @@ static inline void pud_free(struct mm_struct *mm, pud_t *pud) | |||
47 | free_page((unsigned long)pud); | 47 | free_page((unsigned long)pud); |
48 | } | 48 | } |
49 | 49 | ||
50 | /* Should really implement gc for free page table pages. This could be | ||
51 | done with a reference count in struct page. */ | ||
52 | |||
53 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
54 | { | ||
55 | BUG_ON((unsigned long)pte & (PAGE_SIZE-1)); | ||
56 | free_page((unsigned long)pte); | ||
57 | } | ||
58 | |||
59 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) | ||
60 | { | ||
61 | pgtable_page_dtor(pte); | ||
62 | __free_page(pte); | ||
63 | } | ||
64 | |||
65 | extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte); | ||
66 | extern void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd); | 50 | extern void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd); |
67 | extern void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud); | 51 | extern void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud); |
68 | 52 | ||