]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: mprotect: always skip dma pinned folio in prot_numa_skip()
authorKefeng Wang <wangkefeng.wang@huawei.com>
Tue, 14 Oct 2025 11:33:47 +0000 (19:33 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 22 Oct 2025 01:51:37 +0000 (18:51 -0700)
Patch series "mm: some optimizations for prot numa", v2.

This patch (of 3):

If the folio (even not CoW folio) is dma pinned, it can't be migrated
due to the elevated reference count.  So always skip a pinned folio to
avoid wasting cycles when folios are migrated.

Link: https://lkml.kernel.org/r/20251014113349.2618158-1-wangkefeng.wang@huawei.com
Link: https://lkml.kernel.org/r/20251014113349.2618158-2-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Reviewed-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Lance Yang <lance.yang@linux.dev>
Reviewed-by: Barry Song <baohua@kernel.org>
Reviewed-by: Dev Jain <dev.jain@arm.com>
Acked-by: Zi Yan <ziy@nvidia.com>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/mprotect.c

index 988c366137d506ba24a716943175917447ff9ce8..056986d9076a846a72314832f76bc09031f6a500 100644 (file)
@@ -136,9 +136,12 @@ static bool prot_numa_skip(struct vm_area_struct *vma, unsigned long addr,
        if (folio_is_zone_device(folio) || folio_test_ksm(folio))
                goto skip;
 
-       /* Also skip shared copy-on-write pages */
-       if (is_cow_mapping(vma->vm_flags) &&
-           (folio_maybe_dma_pinned(folio) || folio_maybe_mapped_shared(folio)))
+       /* Also skip shared copy-on-write folios */
+       if (is_cow_mapping(vma->vm_flags) && folio_maybe_mapped_shared(folio))
+               goto skip;
+
+       /* Folios are pinned and can't be migrated */
+       if (folio_maybe_dma_pinned(folio))
                goto skip;
 
        /*