From: Greg Kroah-Hartman Date: Tue, 30 Jul 2013 00:17:51 +0000 (-0700) Subject: 3.10-stable patches X-Git-Tag: v3.0.89~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=50f5a4ad7c2fa43992f33b8ae1b8ccfb5a5db429;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: mm-fix-the-tlb-range-flushed-when-__tlb_remove_page-runs-out-of-slots.patch --- diff --git a/queue-3.10/mm-fix-the-tlb-range-flushed-when-__tlb_remove_page-runs-out-of-slots.patch b/queue-3.10/mm-fix-the-tlb-range-flushed-when-__tlb_remove_page-runs-out-of-slots.patch new file mode 100644 index 00000000000..73f659ad3b4 --- /dev/null +++ b/queue-3.10/mm-fix-the-tlb-range-flushed-when-__tlb_remove_page-runs-out-of-slots.patch @@ -0,0 +1,63 @@ +From e6c495a96ce02574e765d5140039a64c8d4e8c9e Mon Sep 17 00:00:00 2001 +From: Vineet Gupta +Date: Wed, 3 Jul 2013 15:03:31 -0700 +Subject: mm: fix the TLB range flushed when __tlb_remove_page() runs out of slots + +From: Vineet Gupta + +commit e6c495a96ce02574e765d5140039a64c8d4e8c9e upstream. + +zap_pte_range loops from @addr to @end. In the middle, if it runs out of +batching slots, TLB entries needs to be flushed for @start to @interim, +NOT @interim to @end. + +Since ARC port doesn't use page free batching I can't test it myself but +this seems like the right thing to do. + +Observed this when working on a fix for the issue at thread: +http://www.spinics.net/lists/linux-arch/msg21736.html + +Signed-off-by: Vineet Gupta +Cc: Mel Gorman +Cc: Hugh Dickins +Cc: Rik van Riel +Cc: David Rientjes +Cc: Peter Zijlstra +Acked-by: Catalin Marinas +Cc: Max Filippov +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + mm/memory.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +--- a/mm/memory.c ++++ b/mm/memory.c +@@ -1101,6 +1101,7 @@ static unsigned long zap_pte_range(struc + spinlock_t *ptl; + pte_t *start_pte; + pte_t *pte; ++ unsigned long range_start = addr; + + again: + init_rss_vec(rss); +@@ -1206,12 +1207,14 @@ again: + force_flush = 0; + + #ifdef HAVE_GENERIC_MMU_GATHER +- tlb->start = addr; +- tlb->end = end; ++ tlb->start = range_start; ++ tlb->end = addr; + #endif + tlb_flush_mmu(tlb); +- if (addr != end) ++ if (addr != end) { ++ range_start = addr; + goto again; ++ } + } + + return addr; diff --git a/queue-3.10/series b/queue-3.10/series new file mode 100644 index 00000000000..8fd21d26bdb --- /dev/null +++ b/queue-3.10/series @@ -0,0 +1 @@ +mm-fix-the-tlb-range-flushed-when-__tlb_remove_page-runs-out-of-slots.patch