]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: Add folio_raw_mapping()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 7 May 2021 15:17:34 +0000 (11:17 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 14 Aug 2021 14:34:12 +0000 (10:34 -0400)
Convert __page_rmapping to folio_raw_mapping and move it to mm/internal.h.
It's only a couple of instructions (load and mask), so it's definitely
going to be cheaper to inline it than call it.  Leave page_rmapping
out of line.  Change page_anon_vma() to not call folio_raw_mapping() --
it's more efficient to do the subtraction than the mask.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: David Howells <dhowells@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
mm/internal.h
mm/util.c

index 1a8851b73031019dac212380a2cfba87391a3227..fa31a7f0ed798f5b4a140b7a94b79979201b88f1 100644 (file)
 
 void page_writeback_init(void);
 
+static inline void *folio_raw_mapping(struct folio *folio)
+{
+       unsigned long mapping = (unsigned long)folio->mapping;
+
+       return (void *)(mapping & ~PAGE_MAPPING_FLAGS);
+}
+
 vm_fault_t do_swap_page(struct vm_fault *vmf);
 void folio_rotate_reclaimable(struct folio *folio);
 
index d135629dbc8b7f4b8ba769c5fda0414b0ee4539e..ec1f3cb827a82da5a5c15648b1ca78495498aea5 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -635,21 +635,10 @@ void kvfree_sensitive(const void *addr, size_t len)
 }
 EXPORT_SYMBOL(kvfree_sensitive);
 
-static inline void *__page_rmapping(struct page *page)
-{
-       unsigned long mapping;
-
-       mapping = (unsigned long)page->mapping;
-       mapping &= ~PAGE_MAPPING_FLAGS;
-
-       return (void *)mapping;
-}
-
 /* Neutral page->mapping pointer to address_space or anon_vma or other */
 void *page_rmapping(struct page *page)
 {
-       page = compound_head(page);
-       return __page_rmapping(page);
+       return folio_raw_mapping(page_folio(page));
 }
 
 /**
@@ -680,13 +669,12 @@ EXPORT_SYMBOL(folio_mapped);
 
 struct anon_vma *page_anon_vma(struct page *page)
 {
-       unsigned long mapping;
+       struct folio *folio = page_folio(page);
+       unsigned long mapping = (unsigned long)folio->mapping;
 
-       page = compound_head(page);
-       mapping = (unsigned long)page->mapping;
        if ((mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON)
                return NULL;
-       return __page_rmapping(page);
+       return (void *)(mapping - PAGE_MAPPING_ANON);
 }
 
 /**