The patch titled Add __GFP_THISNODE to avoid fallback to other nodes and ignore cpuset/memory policy restrictions has been removed from the -mm tree. Its filename is add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: Add __GFP_THISNODE to avoid fallback to other nodes and ignore cpuset/memory policy restrictions From: Christoph Lameter <clameter@xxxxxxx> Add a new gfp flag __GFP_THISNODE to avoid fallback to other nodes. This flag is essential if a kernel component requires memory to be located on a certain node. It will be needed for alloc_pages_node() to force allocation on the indicated node and for alloc_pages() to force allocation on the current node. Signed-off-by: Christoph Lameter <clameter@xxxxxxx> Cc: Andy Whitcroft <apw@xxxxxxxxxxxx> Cc: Mel Gorman <mel@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- include/linux/gfp.h | 3 ++- kernel/cpuset.c | 2 +- mm/mempolicy.c | 2 +- mm/page_alloc.c | 3 +++ 4 files changed, 7 insertions(+), 3 deletions(-) diff -puN include/linux/gfp.h~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore include/linux/gfp.h --- a/include/linux/gfp.h~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore +++ a/include/linux/gfp.h @@ -45,6 +45,7 @@ struct vm_area_struct; #define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */ #define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */ #define __GFP_HARDWALL ((__force gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */ +#define __GFP_THISNODE ((__force gfp_t)0x40000u)/* No fallback, no policies */ #define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */ #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) @@ -53,7 +54,7 @@ struct vm_area_struct; #define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \ __GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \ __GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \ - __GFP_NOMEMALLOC|__GFP_HARDWALL) + __GFP_NOMEMALLOC|__GFP_HARDWALL|__GFP_THISNODE) /* This equals 0, but use constants in case they ever change */ #define GFP_NOWAIT (GFP_ATOMIC & ~__GFP_HIGH) diff -puN kernel/cpuset.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore kernel/cpuset.c --- a/kernel/cpuset.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore +++ a/kernel/cpuset.c @@ -2316,7 +2316,7 @@ int __cpuset_zone_allowed(struct zone *z const struct cpuset *cs; /* current cpuset ancestors */ int allowed; /* is allocation in zone z allowed? */ - if (in_interrupt()) + if (in_interrupt() || (gfp_mask & __GFP_THISNODE)) return 1; node = z->zone_pgdat->node_id; might_sleep_if(!(gfp_mask & __GFP_HARDWALL)); diff -puN mm/mempolicy.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore mm/mempolicy.c --- a/mm/mempolicy.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore +++ a/mm/mempolicy.c @@ -1290,7 +1290,7 @@ struct page *alloc_pages_current(gfp_t g if ((gfp & __GFP_WAIT) && !in_interrupt()) cpuset_update_task_memory_state(); - if (!pol || in_interrupt()) + if (!pol || in_interrupt() || (gfp & __GFP_THISNODE)) pol = &default_policy; if (pol->policy == MPOL_INTERLEAVE) return alloc_page_interleave(gfp, order, interleave_nodes(pol)); diff -puN mm/page_alloc.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore mm/page_alloc.c --- a/mm/page_alloc.c~add-__gfp_thisnode-to-avoid-fallback-to-other-nodes-and-ignore +++ a/mm/page_alloc.c @@ -893,6 +893,9 @@ get_page_from_freelist(gfp_t gfp_mask, u * See also cpuset_zone_allowed() comment in kernel/cpuset.c. */ do { + if (unlikely((gfp_mask & __GFP_THISNODE) && + (*z)->zone_pgdat != zonelist->zones[0]->zone_pgdat)) + break; if ((alloc_flags & ALLOC_CPUSET) && !cpuset_zone_allowed(*z, gfp_mask)) continue; _ Patches currently in -mm which might be from clameter@xxxxxxx are origin.patch git-ia64.patch slab-fix-kmalloc_node-applying-memory-policies-if-nodeid-==-numa_node_id.patch add-numa_build-definition-in-kernelh-to-avoid-ifdef.patch disable-gfp_thisnode-in-the-non-numa-case.patch gfp_thisnode-for-the-slab-allocator-v2.patch gfp_thisnode-for-the-slab-allocator-v2-fix-3.patch add-node-to-zone-for-the-numa-case.patch add-node-to-zone-for-the-numa-case-fix.patch get-rid-of-zone_table.patch get-rid-of-zone_table-fix.patch do-not-allocate-pagesets-for-unpopulated-zones.patch zone_statistics-use-hot-node-instead-of-cold-zone_pgdat.patch deal-with-cases-of-zone_dma-meaning-the-first-zone.patch introduce-config_zone_dma.patch optional-zone_dma-in-the-vm.patch optional-zone_dma-for-i386.patch optional-zone_dma-for-x86_64.patch optional-zone_dma-for-ia64.patch remove-zone_dma-remains-from-parisc.patch remove-zone_dma-remains-from-sh-sh64.patch radix-tree-rcu-lockless-readside.patch scheduler-numa-aware-placement-of-sched_group_allnodes.patch zvc-support-nr_slab_reclaimable--nr_slab_unreclaimable-swap_prefetch.patch reduce-max_nr_zones-swap_prefetch-remove-incorrect-use-of-zone_highmem.patch numa-add-zone_to_nid-function-swap_prefetch.patch readahead-state-based-method-aging-accounting-apply-type-enum-zone_type-readahead.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html