[PATCH v3 08/14] mm/gup: Break COW PTE in follow_pfn_pte()

From: Chih-En Lin
Date: Tue Dec 20 2022 - 02:27:20 EST


In most of cases, GUP will not modify the page table,
excluding follow_pfn_pte(). To deal with COW PTE, break
COW PTE in follow_pfn_pte().

Signed-off-by: Chih-En Lin <shiyn.lin@xxxxxxxxx>
---
mm/gup.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/mm/gup.c b/mm/gup.c
index fe195d47de74a..cd72010ba0e6d 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -476,6 +476,8 @@ static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address,
entry = pte_mkyoung(entry);

if (!pte_same(*pte, entry)) {
+ if (break_cow_pte(vma, NULL, address) < 0)
+ return -ENOMEM;
set_pte_at(vma->vm_mm, address, pte, entry);
update_mmu_cache(vma, address, pte);
}
--
2.37.3