Dave Hansen brought this to my attention. I've attached the bit of the memory fragmentation avoidance you conflict with (I'm working with Mel on his patches). I think we share similar goals, and I wouldn't mind changing __GFP_USERRCLM to __GFP_USERALLOC or some neutral name we could share. Anything to increase the chances of fragmentation avoidance getting merged is good in my book. -Joel >>GFP_USER allocations, and distinguish them from GFP_KERNEL allocations. >> >>Allocations (such as GFP_USER) marked GFP_HARDWALL are constrainted to >>the current tasks cpuset. Other allocations (such as GFP_KERNEL) can >>steal from the possibly larger nearest mem_exclusive cpuset ancestor, >>if memory is tight on every node in the current cpuset. >> >>This patch collides with Mel Gorman's patch to reduce fragmentation >>in the standard buddy allocator, which adds two GFP flags. At first >>glance, it seems that his added __GFP_USERRCLM flag could be used in >>place of the following __GFP_HARDWALL, as they both seem to be set >>the same way - for GFP_USER and GFP_HIGHUSER. Perhaps we should call >>this flag __GFP_USER, rather than some name dependent on its use(s). > > > Does this make sense to integrate into your patches? > > Index: linux-2.6-mem_exclusive/include/linux/gfp.h > =================================================================== > --- linux-2.6-mem_exclusive.orig/include/linux/gfp.h 2005-07-02 17:42:02.000000000 -0700 > +++ linux-2.6-mem_exclusive/include/linux/gfp.h 2005-07-02 17:43:00.000000000 -0700 > @@ -40,6 +40,7 @@ struct vm_area_struct; > #define __GFP_ZERO 0x8000u /* Return zeroed page on success */ > #define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */ > #define __GFP_NORECLAIM 0x20000u /* No zone reclaim during page_cache_alloc */ > +#define __GFP_HARDWALL 0x40000u /* Enforce hardwall cpuset memory allocs */ > > #define __GFP_BITS_SHIFT 20 /* Room for 20 __GFP_FOO bits */ > #define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1) > @@ -48,14 +49,15 @@ 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_NORECLAIM) > + __GFP_NOMEMALLOC|__GFP_NORECLAIM|__GFP_HARDWALL) > > #define GFP_ATOMIC (__GFP_HIGH) > #define GFP_NOIO (__GFP_WAIT) > #define GFP_NOFS (__GFP_WAIT | __GFP_IO) > #define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) > -#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS) > -#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM) > +#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL) > +#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \ > + __GFP_HIGHMEM) > > /* Flag - indicates that the buffer will be suitable for DMA. Ignored on some > platforms, used as appropriate on others */