diff options
author | Mark Brown <broonie@linaro.org> | 2013-08-04 12:56:58 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-08-04 12:56:58 +0100 |
commit | abd3d40de3b35b9bdea7fa27a7cbfe1ee3dbd1b9 (patch) | |
tree | e7b4508e1c41234104db2f3368d6607c8b78ed04 /mm | |
parent | 3b08c7740bb1e0ef69c71c7232a870ca250a9e21 (diff) | |
parent | dc51cd2570468bb7bcf1815a60929023316ca868 (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.c | 9 | ||||
-rw-r--r-- | mm/mempolicy.c | 6 | ||||
-rw-r--r-- | mm/mmap.c | 2 |
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), |