diff --git a/[refs] b/[refs] index d20ac16090f4..122793034641 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 988519acb3dbe7168276a36cbb8fd91fddbffaee +refs/heads/master: 6ad8d010b2f364b739020e514e61b6a73444464b diff --git a/trunk/include/asm-powerpc/tlb.h b/trunk/include/asm-powerpc/tlb.h index 0a17682663d8..66714042e438 100644 --- a/trunk/include/asm-powerpc/tlb.h +++ b/trunk/include/asm-powerpc/tlb.h @@ -38,6 +38,15 @@ extern void pte_free_finish(void); static inline void tlb_flush(struct mmu_gather *tlb) { + struct ppc64_tlb_batch *tlbbatch = &__get_cpu_var(ppc64_tlb_batch); + + /* If there's a TLB batch pending, then we must flush it because the + * pages are going to be freed and we really don't want to have a CPU + * access a freed page because it has a stale TLB + */ + if (tlbbatch->index) + __flush_tlb_pending(tlbbatch); + pte_free_finish(); }