|
@@ -110,6 +110,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
|
|
|
static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
|
|
|
unsigned long address)
|
|
|
{
|
|
|
+ /*
|
|
|
+ * By now all the pud entries should be none entries. So go
|
|
|
+ * ahead and flush the page walk cache
|
|
|
+ */
|
|
|
+ flush_tlb_pgtable(tlb, address);
|
|
|
pgtable_free_tlb(tlb, pud, PUD_INDEX_SIZE);
|
|
|
}
|
|
|
|
|
@@ -127,6 +132,11 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
|
|
static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
|
|
|
unsigned long address)
|
|
|
{
|
|
|
+ /*
|
|
|
+ * By now all the pud entries should be none entries. So go
|
|
|
+ * ahead and flush the page walk cache
|
|
|
+ */
|
|
|
+ flush_tlb_pgtable(tlb, address);
|
|
|
return pgtable_free_tlb(tlb, pmd, PMD_CACHE_INDEX);
|
|
|
}
|
|
|
|
|
@@ -198,7 +208,11 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage)
|
|
|
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
|
|
|
unsigned long address)
|
|
|
{
|
|
|
- tlb_flush_pgtable(tlb, address);
|
|
|
+ /*
|
|
|
+ * By now all the pud entries should be none entries. So go
|
|
|
+ * ahead and flush the page walk cache
|
|
|
+ */
|
|
|
+ flush_tlb_pgtable(tlb, address);
|
|
|
pgtable_free_tlb(tlb, table, 0);
|
|
|
}
|
|
|
|