From: Christoph Lameter Date: Tue, 18 Dec 2007 00:20:27 +0000 (-0800) Subject: quicklist: Set tlb->need_flush if pages are remaining in quicklist 0 X-Git-Tag: v2.6.24-rc6~25 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=421d99193537a6522aac2148286f08792167d5fd;p=linux-2.6-omap-h63xx.git quicklist: Set tlb->need_flush if pages are remaining in quicklist 0 This ensures that the quicklists are drained. Otherwise draining may only occur when the processor reaches an idle state. Fixes fatal leakage of pgd_t's on 2.6.22 and later. Signed-off-by: Christoph Lameter Reported-by: Dhaval Giani Cc: Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index f490e43a90b..799307eea40 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h @@ -14,6 +14,7 @@ #define _ASM_GENERIC__TLB_H #include +#include #include #include @@ -85,6 +86,9 @@ tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) static inline void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) { +#ifdef CONFIG_QUICKLIST + tlb->need_flush += &__get_cpu_var(quicklist)[0].nr_pages != 0; +#endif tlb_flush_mmu(tlb, start, end); /* keep the page table cache within bounds */