aboutsummaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-08-04 12:56:58 +0100
committerMark Brown <broonie@linaro.org>2013-08-04 12:56:58 +0100
commitabd3d40de3b35b9bdea7fa27a7cbfe1ee3dbd1b9 (patch)
treee7b4508e1c41234104db2f3368d6607c8b78ed04 /mm
parent3b08c7740bb1e0ef69c71c7232a870ca250a9e21 (diff)
parentdc51cd2570468bb7bcf1815a60929023316ca868 (diff)
Merge tag 'v3.10.5' into linux-linaro-lsk
This is the 3.10.5 stable release
Diffstat (limited to 'mm')
-rw-r--r--mm/memory.c9
-rw-r--r--mm/mempolicy.c6
-rw-r--r--mm/mmap.c2
3 files changed, 12 insertions, 5 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 61a262b08e5..5e5080005bc 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1101,6 +1101,7 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb,
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/mm/mempolicy.c b/mm/mempolicy.c
index 74310017296..4baf12e534d 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -732,7 +732,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
if (prev) {
vma = prev;
next = vma->vm_next;
- continue;
+ if (mpol_equal(vma_policy(vma), new_pol))
+ continue;
+ /* vma_merge() joined vma && vma->next, case 8 */
+ goto replace;
}
if (vma->vm_start != vmstart) {
err = split_vma(vma->vm_mm, vma, vmstart, 1);
@@ -744,6 +747,7 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
if (err)
goto out;
}
+ replace:
err = vma_replace_policy(vma, new_pol);
if (err)
goto out;
diff --git a/mm/mmap.c b/mm/mmap.c
index f681e1842fa..7dbe39745be 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -865,7 +865,7 @@ again: remove_next = 1 + (end > next->vm_end);
if (next->anon_vma)
anon_vma_merge(vma, next);
mm->map_count--;
- vma_set_policy(vma, vma_policy(next));
+ mpol_put(vma_policy(next));
kmem_cache_free(vm_area_cachep, next);
/*
* In mprotect's case 6 (see comments on vma_merge),