Message ID | 2b7dceaa12da273c6decf92e3bf2ebc4f4e85ec5.1724310149.git.zhengqi.arch@bytedance.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | introduce pte_offset_map_{ro|rw}_nolock() | expand |
On 22.08.24 09:13, Qi Zheng wrote: > In __collapse_huge_page_swapin(), we just use the ptl for pte_same() check > in do_swap_page(). In other places, we directly use pte_offset_map_lock(), > so convert it to using pte_offset_map_ro_nolock(). > > Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> > --- > mm/khugepaged.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 4a83c40d90538..53bfa7f4b7f82 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1011,7 +1011,11 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, > }; > > if (!pte++) { > - pte = pte_offset_map_nolock(mm, pmd, address, &ptl); > + /* > + * Here the ptl is only used to check pte_same() in > + * do_swap_page(), so readonly version is enough. > + */ > + pte = pte_offset_map_ro_nolock(mm, pmd, address, &ptl); > if (!pte) { > mmap_read_unlock(mm); > result = SCAN_PMD_NULL; Suboptimal that the pteval comparison + unmap is buried in do_swap_page(). Moving that to the caller is also not significantly better ... Acked-by: David Hildenbrand <david@redhat.com>
> On Aug 22, 2024, at 15:13, Qi Zheng <zhengqi.arch@bytedance.com> wrote: > > In __collapse_huge_page_swapin(), we just use the ptl for pte_same() check > in do_swap_page(). In other places, we directly use pte_offset_map_lock(), > so convert it to using pte_offset_map_ro_nolock(). > > Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Reviewed-by: Muchun Song <muchun.song@linux.dev>
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 4a83c40d90538..53bfa7f4b7f82 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1011,7 +1011,11 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, }; if (!pte++) { - pte = pte_offset_map_nolock(mm, pmd, address, &ptl); + /* + * Here the ptl is only used to check pte_same() in + * do_swap_page(), so readonly version is enough. + */ + pte = pte_offset_map_ro_nolock(mm, pmd, address, &ptl); if (!pte) { mmap_read_unlock(mm); result = SCAN_PMD_NULL;
In __collapse_huge_page_swapin(), we just use the ptl for pte_same() check in do_swap_page(). In other places, we directly use pte_offset_map_lock(), so convert it to using pte_offset_map_ro_nolock(). Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> --- mm/khugepaged.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)