mm: use flush_icache_pages() in do_set_pmd()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 2 Aug 2023 15:14:01 +0000 (16:14 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 24 Aug 2023 23:20:25 +0000 (16:20 -0700)
Push the iteration over each page down to the architectures (many can
flush the entire THP without iteration).

Link: https://lkml.kernel.org/r/20230802151406.3735276-34-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memory.c

index 2c6f45d18b73f5a82741c0af2838d8f84f3ee35d..fbb7f066bfb6d1d1069e7df1072845033bb87bbd 100644 (file)
@@ -4265,7 +4265,6 @@ vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
        bool write = vmf->flags & FAULT_FLAG_WRITE;
        unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
        pmd_t entry;
-       int i;
        vm_fault_t ret = VM_FAULT_FALLBACK;
 
        if (!transhuge_vma_suitable(vma, haddr))
@@ -4298,8 +4297,7 @@ vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
        if (unlikely(!pmd_none(*vmf->pmd)))
                goto out;
 
-       for (i = 0; i < HPAGE_PMD_NR; i++)
-               flush_icache_page(vma, page + i);
+       flush_icache_pages(vma, page, HPAGE_PMD_NR);
 
        entry = mk_huge_pmd(page, vma->vm_page_prot);
        if (write)