X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=include%2Fasm-powerpc%2Ftlb.h;h=66714042e4383399a597ec5867a14e46e52ee1bc;hb=e070fb743d9d13d9757e633d1bdd1f9c20b2d792;hp=4e2a834683fbcae87e39b4bbdaaefa3b7bbc6b18;hpb=37224470c8c6d90a4062e76a08d4dc1fcf91fc89;p=cascardo%2Flinux.git diff --git a/include/asm-powerpc/tlb.h b/include/asm-powerpc/tlb.h index 4e2a834683fb..66714042e438 100644 --- a/include/asm-powerpc/tlb.h +++ b/include/asm-powerpc/tlb.h @@ -38,7 +38,15 @@ extern void pte_free_finish(void); static inline void tlb_flush(struct mmu_gather *tlb) { - flush_tlb_pending(); + 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(); }