mm/vmalloc.c: support HIGHMEM pages in vmap_pages_range_noflush()
authorMatthew Wilcox <willy@infradead.org>
Thu, 18 Aug 2022 21:07:41 +0000 (22:07 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 12 Sep 2022 03:25:56 +0000 (20:25 -0700)
If the pages being mapped are in HIGHMEM, page_address() returns NULL.
This probably wasn't noticed before because there aren't currently any
architectures with HAVE_ARCH_HUGE_VMALLOC and HIGHMEM, but it's simpler to
call page_to_phys() and futureproofs us against such configurations
existing.

Link: https://lkml.kernel.org/r/Yv6qHc6e+m7TMWhi@casper.infradead.org
Fixes: 121e6f3258fe ("mm/vmalloc: hugepage vmalloc mappings")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Uladzislau Rezki <urezki@gmail.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/vmalloc.c

index dd6cdb2011953d6eac7455055bd589280d442ed7..e68c0081e861b9123584e06a76d39ba57c9de366 100644 (file)
@@ -590,7 +590,7 @@ int vmap_pages_range_noflush(unsigned long addr, unsigned long end,
                int err;
 
                err = vmap_range_noflush(addr, addr + (1UL << page_shift),
-                                       __pa(page_address(pages[i])), prot,
+                                       page_to_phys(pages[i]), prot,
                                        page_shift);
                if (err)
                        return err;