mm-page_alloc-explicitly-record-high-order-atomic-allocations-in-alloc_flags.patch removed from -mm tree
The quilt patch titled
Subject: mm/page_alloc: explicitly record high-order atomic allocations in alloc_flags
has been removed from the -mm tree. Its filename was
mm-page_alloc-explicitly-record-high-order-atomic-allocations-in-alloc_flags.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Mel Gorman <[email protected]>
Subject: mm/page_alloc: explicitly record high-order atomic allocations in alloc_flags
Date: Fri, 13 Jan 2023 11:12:14 +0000
A high-order ALLOC_HARDER allocation is assumed to be atomic. While that is accurate, it changes later in the series. In preparation, explicitly record high-order atomic allocations in gfp_to_alloc_flags().
---
mm/internal.h renamed from mm/internal.h~mm-page_alloc-explicitly-record-high-order-atomic-allocations-in-alloc_flags +1 -0
@@ -789,6 +789,7 @@ unsigned int reclaim_clean_pages_from_li#else #define ALLOC_NOFRAGMENT 0x0#endif +#define ALLOC_HIGHATOMIC 0x200/* Allows access to MIGRATE_HIGHATOMIC */ #define ALLOC_KSWAPD 0x800/* allow waking of kswapd, __GFP_KSWAPD_RECLAIM set */ enum ttu_flags ;
mm/page_alloc.c renamed from mm/page_alloc.c~mm-page_alloc-explicitly-record-high-order-atomic-allocations-in-alloc_flags +23 -6
@@ -3724,10 +3724,20 @@ struct page *rmqueue_buddy(struct zone ** reserved for high-order atomic allocation, so order-0 * request should skip it. */ -if (order >0 && alloc_flags &ALLOC_HARDER ) +if (alloc_flags &ALLOC_HIGHATOMIC ) page =__rmqueue_smallest (zone, order,MIGRATE_HIGHATOMIC );if (!page) { page =__rmqueue (zone, order, migratetype, alloc_flags); + +/* +* If the allocation fails, allow OOM handling access +* to HIGHATOMIC reserves as failing now is worse than +* failing a high-order atomic allocation in the +* future. +*/ +if (!page && (alloc_flags &ALLOC_OOM )) + page =__rmqueue_smallest (zone, order,MIGRATE_HIGHATOMIC ); +if (!page) {spin_unlock_irqrestore (&zone->lock, flags);return NULL ;
@@ -4041,8 +4051,10 @@ bool __zone_watermark_ok(struct zone *z, return true; }#endif -if (alloc_harder && !free_area_empty (area,MIGRATE_HIGHATOMIC )) +if ((alloc_flags & (ALLOC_HIGHATOMIC |ALLOC_OOM )) && + !free_area_empty (area,MIGRATE_HIGHATOMIC )) {return true; + } }return false; }
@@ -4304,7 +4316,7 @@ try_this_zone:* If this is a high-order atomic allocation then check * if the pageblock should be reserved for the future */ -if (unlikely (order && (alloc_flags &ALLOC_HARDER ))) +if (unlikely (alloc_flags &ALLOC_HIGHATOMIC ))reserve_highatomic_pageblock (page, zone, order);return page;
@@ -4831,7 +4843,7 @@ static void wake_all_kswapds(unsigned in }static inline unsigned int -gfp_to_alloc_flags (gfp_t gfp_mask) +gfp_to_alloc_flags (gfp_t gfp_mask,unsigned int order) {unsigned int alloc_flags =ALLOC_WMARK_MIN |ALLOC_CPUSET ;
@@ -4857,8 +4869,13 @@ gfp_to_alloc_flags(gfp_t gfp_mask)* Not worth trying to allocate harder for __GFP_NOMEMALLOC even * if it can't schedule. */ -if (!(gfp_mask & __GFP_NOMEMALLOC)) +if (!(gfp_mask & __GFP_NOMEMALLOC)) { alloc_flags |=ALLOC_HARDER ; + +if (order >0 ) + alloc_flags |=ALLOC_HIGHATOMIC ; + } +/* * Ignore cpuset mems for GFP_ATOMIC rather than fail, see the * comment for __cpuset_node_allowed().
@@ -5066,7 +5083,7 @@ restart:* kswapd needs to be woken up, and to avoid the cost of setting up * alloc_flags precisely. So we do that now. */ - alloc_flags =gfp_to_alloc_flags (gfp_mask); + alloc_flags =gfp_to_alloc_flags (gfp_mask, order);/* * We need to recalculate the starting point for the zonelist iterator
_
Patches currently in -mm which might be from [email protected] are