]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm: mprotect: always skip dma pinned folio in prot_numa_skip()
authorKefeng Wang <wangkefeng.wang@huawei.com>
Thu, 23 Oct 2025 11:37:34 +0000 (19:37 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 17 Nov 2025 01:28:03 +0000 (17:28 -0800)
Patch series "mm: some optimizations for prot numa", v5.

This patch (of 4):

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/20251023113737.3572790-1-wangkefeng.wang@huawei.com
Link: https://lkml.kernel.org/r/20251023113737.3572790-2-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Zi Yan <ziy@nvidia.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Barry Song <baohua@kernel.org>
Reviewed-by: Dev Jain <dev.jain@arm.com>
Reviewed-by: Lance Yang <lance.yang@linux.dev>
Reviewed-by: Sidhartha Kumar <sidhartha.kumar@oracle.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;
 
        /*