@@ -5063,6 +5063,20 @@ int numa_migrate_prep(struct folio *folio, struct vm_fault *vmf,
5063
5063
return mpol_misplaced (folio , vmf , addr );
5064
5064
}
5065
5065
5066
+ static void numa_rebuild_single_mapping (struct vm_fault * vmf , struct vm_area_struct * vma ,
5067
+ bool writable )
5068
+ {
5069
+ pte_t pte , old_pte ;
5070
+
5071
+ old_pte = ptep_modify_prot_start (vma , vmf -> address , vmf -> pte );
5072
+ pte = pte_modify (old_pte , vma -> vm_page_prot );
5073
+ pte = pte_mkyoung (pte );
5074
+ if (writable )
5075
+ pte = pte_mkwrite (pte , vma );
5076
+ ptep_modify_prot_commit (vma , vmf -> address , vmf -> pte , old_pte , pte );
5077
+ update_mmu_cache_range (vmf , vma , vmf -> address , vmf -> pte , 1 );
5078
+ }
5079
+
5066
5080
static vm_fault_t do_numa_page (struct vm_fault * vmf )
5067
5081
{
5068
5082
struct vm_area_struct * vma = vmf -> vma ;
@@ -5168,13 +5182,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf)
5168
5182
* Make it present again, depending on how arch implements
5169
5183
* non-accessible ptes, some can allow access by kernel mode.
5170
5184
*/
5171
- old_pte = ptep_modify_prot_start (vma , vmf -> address , vmf -> pte );
5172
- pte = pte_modify (old_pte , vma -> vm_page_prot );
5173
- pte = pte_mkyoung (pte );
5174
- if (writable )
5175
- pte = pte_mkwrite (pte , vma );
5176
- ptep_modify_prot_commit (vma , vmf -> address , vmf -> pte , old_pte , pte );
5177
- update_mmu_cache_range (vmf , vma , vmf -> address , vmf -> pte , 1 );
5185
+ numa_rebuild_single_mapping (vmf , vma , writable );
5178
5186
pte_unmap_unlock (vmf -> pte , vmf -> ptl );
5179
5187
goto out ;
5180
5188
}
0 commit comments