Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0af50bea authored by Suren Baghdasaryan's avatar Suren Baghdasaryan Committed by Srinivasarao Pathipati
Browse files

ANDROID: mm/khugepaged: add missing vm_write_{begin|end}



Speculative page fault handler needs to detect concurrent pmd changes
and relies on vma seqcount for that. pmdp_collapse_flush(), set_huge_pmd() and collapse_and_free_pmd() can modify a pmd.
vm_write_{begin|end} are needed in the paths which can call these
functions for page fault handler to detect pmd changes.

Bug: 257443051
Change-Id: Ieb784b5f44901b66a594f61b9e7c91190ff97f80
Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
Git-commit: 5ed391bd8ad8481d82c1bbb05a35f5538966dce9
Git-repo: https://android.googlesource.com/kernel/common/


[quic_c_spathi@quicinc.com: resolve trivial merge conflicts]
Signed-off-by: default avatarSrinivasarao Pathipati <quic_c_spathi@quicinc.com>
parent 53d30c2a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1294,10 +1294,12 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
		 */
		if (down_write_trylock(&mm->mmap_sem)) {
			if (!khugepaged_test_exit(mm)) {
				vm_write_begin(vma);
				spinlock_t *ptl = pmd_lock(mm, pmd);
				/* assume page table is clear */
				_pmd = pmdp_collapse_flush(vma, addr, pmd);
				spin_unlock(ptl);
				vm_write_end(vma);
				mm_dec_nr_ptes(mm);
				pte_free(mm, pmd_pgtable(_pmd));
			}