lkml.org 
[lkml]   [2021]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 02/46] mm: Add folio_rmapping()
    Date
    Convert __page_rmapping to folio_rmapping 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.

    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    ---
    mm/internal.h | 7 +++++++
    mm/util.c | 20 ++++----------------
    2 files changed, 11 insertions(+), 16 deletions(-)

    diff --git a/mm/internal.h b/mm/internal.h
    index 76ddcf55012c..3e70121c71c7 100644
    --- a/mm/internal.h
    +++ b/mm/internal.h
    @@ -34,6 +34,13 @@

    void page_writeback_init(void);

    +static inline void *folio_rmapping(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);

    diff --git a/mm/util.c b/mm/util.c
    index a8766e7f1b7f..0ba3a56c2c90 100644
    --- 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_rmapping(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 folio_rmapping(folio);
    }

    /**
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-06-22 14:20    [W:2.580 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site