]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
mm: Add folio_is_pci_p2pdma() folio-page-split
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 1 Aug 2025 18:42:06 +0000 (14:42 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 1 Aug 2025 18:42:06 +0000 (14:42 -0400)
Reimplement is_pci_p2pdma_page() in terms of folio_is_pci_p2pdma().  Moves
the page_folio() call from inside page_pgmap() to is_pci_p2pdma_page().
This removes a page_folio() call from try_grab_folio() which already
has a folio and can pass it in.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
include/linux/memremap.h
mm/gup.c

index 450d4bb6835cc780be67e61d642eb4b87845b254..aa1b6aa877a029c58d86b18df387341e6a568b07 100644 (file)
@@ -170,11 +170,17 @@ static inline bool is_device_private_page(const struct page *page)
                folio_is_device_private(page_folio(page));
 }
 
+static inline bool folio_is_pci_p2pdma(const struct folio *folio)
+{
+       return IS_ENABLED(CONFIG_PCI_P2PDMA) &&
+               folio_is_zone_device(folio) &&
+               folio->pgmap->type == MEMORY_DEVICE_PCI_P2PDMA;
+}
+
 static inline bool is_pci_p2pdma_page(const struct page *page)
 {
        return IS_ENABLED(CONFIG_PCI_P2PDMA) &&
-               is_zone_device_page(page) &&
-               page_pgmap(page)->type == MEMORY_DEVICE_PCI_P2PDMA;
+               folio_is_pci_p2pdma(page_folio(page));
 }
 
 static inline bool folio_is_device_coherent(const struct folio *folio)
index adffe663594dc61441ad64cc7754d5f5376d5478..e02f8dc641dff171c91c303dba240a7f6f3882da 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -148,7 +148,7 @@ int __must_check try_grab_folio(struct folio *folio, int refs,
        if (WARN_ON_ONCE(folio_ref_count(folio) <= 0))
                return -ENOMEM;
 
-       if (unlikely(!(flags & FOLL_PCI_P2PDMA) && is_pci_p2pdma_page(&folio->page)))
+       if (unlikely(!(flags & FOLL_PCI_P2PDMA) && folio_is_pci_p2pdma(folio)))
                return -EREMOTEIO;
 
        if (flags & FOLL_GET)