lkml.org 
[lkml]   [2020]   [Oct]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/5] mm/page_alloc: convert "report" flag of __free_one_page() to a proper flag
    Date
    Let's prepare for additional flags and avoid long parameter lists of bools.
    Follow-up patches will also make use of the flags in __free_pages_ok().

    Reviewed-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Reviewed-by: Oscar Salvador <osalvador@suse.de>
    Reviewed-by: Wei Yang <richard.weiyang@linux.alibaba.com>
    Reviewed-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Alexander Duyck <alexander.h.duyck@linux.intel.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Mike Rapoport <rppt@kernel.org>
    Signed-off-by: David Hildenbrand <david@redhat.com>
    ---
    mm/page_alloc.c | 27 ++++++++++++++++++++++-----
    1 file changed, 22 insertions(+), 5 deletions(-)

    diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    index 7012d67a302d..2bf235b1953f 100644
    --- a/mm/page_alloc.c
    +++ b/mm/page_alloc.c
    @@ -78,6 +78,22 @@
    #include "shuffle.h"
    #include "page_reporting.h"

    +/* Free Page Internal flags: for internal, non-pcp variants of free_pages(). */
    +typedef int __bitwise fpi_t;
    +
    +/* No special request */
    +#define FPI_NONE ((__force fpi_t)0)
    +
    +/*
    + * Skip free page reporting notification for the (possibly merged) page.
    + * This does not hinder free page reporting from grabbing the page,
    + * reporting it and marking it "reported" - it only skips notifying
    + * the free page reporting infrastructure about a newly freed page. For
    + * example, used when temporarily pulling a page from a freelist and
    + * putting it back unmodified.
    + */
    +#define FPI_SKIP_REPORT_NOTIFY ((__force fpi_t)BIT(0))
    +
    /* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */
    static DEFINE_MUTEX(pcp_batch_high_lock);
    #define MIN_PERCPU_PAGELIST_FRACTION (8)
    @@ -952,7 +968,7 @@ buddy_merge_likely(unsigned long pfn, unsigned long buddy_pfn,
    static inline void __free_one_page(struct page *page,
    unsigned long pfn,
    struct zone *zone, unsigned int order,
    - int migratetype, bool report)
    + int migratetype, fpi_t fpi_flags)
    {
    struct capture_control *capc = task_capc(zone);
    unsigned long buddy_pfn;
    @@ -1039,7 +1055,7 @@ static inline void __free_one_page(struct page *page,
    add_to_free_list(page, zone, order, migratetype);

    /* Notify page reporting subsystem of freed page */
    - if (report)
    + if (!(fpi_flags & FPI_SKIP_REPORT_NOTIFY))
    page_reporting_notify_free(order);
    }

    @@ -1380,7 +1396,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
    if (unlikely(isolated_pageblocks))
    mt = get_pageblock_migratetype(page);

    - __free_one_page(page, page_to_pfn(page), zone, 0, mt, true);
    + __free_one_page(page, page_to_pfn(page), zone, 0, mt, FPI_NONE);
    trace_mm_page_pcpu_drain(page, 0, mt);
    }
    spin_unlock(&zone->lock);
    @@ -1396,7 +1412,7 @@ static void free_one_page(struct zone *zone,
    is_migrate_isolate(migratetype))) {
    migratetype = get_pfnblock_migratetype(page, pfn);
    }
    - __free_one_page(page, pfn, zone, order, migratetype, true);
    + __free_one_page(page, pfn, zone, order, migratetype, FPI_NONE);
    spin_unlock(&zone->lock);
    }

    @@ -3289,7 +3305,8 @@ void __putback_isolated_page(struct page *page, unsigned int order, int mt)
    lockdep_assert_held(&zone->lock);

    /* Return isolated page to tail of freelist. */
    - __free_one_page(page, page_to_pfn(page), zone, order, mt, false);
    + __free_one_page(page, page_to_pfn(page), zone, order, mt,
    + FPI_SKIP_REPORT_NOTIFY);
    }

    /*
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-10-05 14:17    [W:2.603 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site