From 924ed5256e1f6cf7faab7aceb91ac8fbab7f9fd5 Mon Sep 17 00:00:00 2001 From: Alexander Winkowski Date: Fri, 12 Jan 2024 04:56:23 +0000 Subject: [PATCH] Revert "ANDROID: mm: remove sequence counting when mmap_lock is not exclusively owned" This reverts commit ad939deb18f94f32016e156aff54c84d1519d1b5. Change-Id: I210d9aa077b3b68916166d2b5265ef0600c5e3bb Signed-off-by: Alexander Winkowski --- mm/madvise.c | 6 ++++++ mm/memory.c | 2 ++ mm/mempolicy.c | 2 ++ 3 files changed, 10 insertions(+) diff --git a/mm/madvise.c b/mm/madvise.c index 06072daa7b0b..023e11d4c8bf 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -501,9 +501,11 @@ static void madvise_cold_page_range(struct mmu_gather *tlb, .target_task = task, }; + vm_write_begin(vma); tlb_start_vma(tlb, vma); walk_page_range(vma->vm_mm, addr, end, &cold_walk_ops, &walk_private); tlb_end_vma(tlb, vma); + vm_write_end(vma); } static long madvise_cold(struct task_struct *task, @@ -537,9 +539,11 @@ static void madvise_pageout_page_range(struct mmu_gather *tlb, .target_task = task, }; + vm_write_begin(vma); tlb_start_vma(tlb, vma); walk_page_range(vma->vm_mm, addr, end, &cold_walk_ops, &walk_private); tlb_end_vma(tlb, vma); + vm_write_end(vma); } static inline bool can_do_pageout(struct vm_area_struct *vma) @@ -742,10 +746,12 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, update_hiwater_rss(mm); mmu_notifier_invalidate_range_start(&range); + vm_write_begin(vma); tlb_start_vma(&tlb, vma); walk_page_range(vma->vm_mm, range.start, range.end, &madvise_free_walk_ops, &tlb); tlb_end_vma(&tlb, vma); + vm_write_end(vma); mmu_notifier_invalidate_range_end(&range); tlb_finish_mmu(&tlb, range.start, range.end); diff --git a/mm/memory.c b/mm/memory.c index e3a6880f7295..6ad73caf3c1c 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1293,6 +1293,7 @@ void unmap_page_range(struct mmu_gather *tlb, unsigned long next; BUG_ON(addr >= end); + vm_write_begin(vma); tlb_start_vma(tlb, vma); pgd = pgd_offset(vma->vm_mm, addr); do { @@ -1302,6 +1303,7 @@ void unmap_page_range(struct mmu_gather *tlb, next = zap_p4d_range(tlb, vma, pgd, addr, next, details); } while (pgd++, addr = next, addr != end); tlb_end_vma(tlb, vma); + vm_write_end(vma); } diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 05c02b191995..284eb71f8e75 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -600,9 +600,11 @@ unsigned long change_prot_numa(struct vm_area_struct *vma, { int nr_updated; + vm_write_begin(vma); nr_updated = change_protection(vma, addr, end, PAGE_NONE, 0, 1); if (nr_updated) count_vm_numa_events(NUMA_PTE_UPDATES, nr_updated); + vm_write_end(vma); return nr_updated; }