diff options
Diffstat (limited to 'mm/pgtable-generic.c')
-rw-r--r-- | mm/pgtable-generic.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/mm/pgtable-generic.c b/mm/pgtable-generic.c index 71c5f9109f2a..4ed5908c65b0 100644 --- a/mm/pgtable-generic.c +++ b/mm/pgtable-generic.c | |||
@@ -123,6 +123,20 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address, | |||
123 | flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); | 123 | flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); |
124 | return pmd; | 124 | return pmd; |
125 | } | 125 | } |
126 | |||
127 | #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD | ||
128 | pud_t pudp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address, | ||
129 | pud_t *pudp) | ||
130 | { | ||
131 | pud_t pud; | ||
132 | |||
133 | VM_BUG_ON(address & ~HPAGE_PUD_MASK); | ||
134 | VM_BUG_ON(!pud_trans_huge(*pudp) && !pud_devmap(*pudp)); | ||
135 | pud = pudp_huge_get_and_clear(vma->vm_mm, address, pudp); | ||
136 | flush_pud_tlb_range(vma, address, address + HPAGE_PUD_SIZE); | ||
137 | return pud; | ||
138 | } | ||
139 | #endif | ||
126 | #endif | 140 | #endif |
127 | 141 | ||
128 | #ifndef __HAVE_ARCH_PGTABLE_DEPOSIT | 142 | #ifndef __HAVE_ARCH_PGTABLE_DEPOSIT |