lkml.org 
[lkml]   [2013]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v4 08/40] mm: Use the correct migratetype during buddy merging
    Date
    While merging buddy free pages of a given order to make a higher order page,
    the buddy allocator might coalesce pages belonging to *two* *different*
    migratetypes of that order!

    So, don't assume that both the buddies come from the same freelist;
    instead, explicitly find out the migratetype info of the buddy page and use
    it while merging the buddies.

    Also, set the freepage migratetype of the buddy to the new one.

    Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    ---

    mm/page_alloc.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    index e31daf4..c40715c 100644
    --- a/mm/page_alloc.c
    +++ b/mm/page_alloc.c
    @@ -685,10 +685,14 @@ static inline void __free_one_page(struct page *page,
    __mod_zone_freepage_state(zone, 1 << order,
    migratetype);
    } else {
    + int mt;
    +
    area = &zone->free_area[order];
    - del_from_freelist(buddy, &area->free_list[migratetype]);
    + mt = get_freepage_migratetype(buddy);
    + del_from_freelist(buddy, &area->free_list[mt]);
    area->nr_free--;
    rmv_page_order(buddy);
    + set_freepage_migratetype(buddy, migratetype);
    }
    combined_idx = buddy_idx & page_idx;
    page = page + (combined_idx - page_idx);


    \
     
     \ /
      Last update: 2013-09-26 01:41    [W:4.210 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site