On 07/24/2012 10:45 PM, Christoph Lameter wrote: > On Tue, 24 Jul 2012, Jiang Liu wrote: > >> >> diff --git a/mm/slub.c b/mm/slub.c >> index 8c691fa..3976745 100644 >> --- a/mm/slub.c >> +++ b/mm/slub.c >> @@ -2803,6 +2803,17 @@ static inline int alloc_kmem_cache_cpus(struct kmem_cache *s) >> >> static struct kmem_cache *kmem_cache_node; >> >> +static bool node_has_normal_memory(int node) >> +{ >> + int i; >> + >> + for (i = ZONE_NORMAL; i >= 0; i--) >> + if (populated_zone(&NODE_DATA(node)->node_zones[i])) >> + return true; >> + >> + return false; >> +} > > There is already a N_NORMAL_MEMORY node map that contains a list of node > that have *normal* memory usable by slab allocators etc. I think the > cleanest solution would be to clear the corresponding node bits for your > special movable only zones. Then you wont be needing to modify other > subsystems anymore. > Hi Chris, Thanks for your comments! I have thought about the solution mentioned, but seems it doesn't work. We have node masks for both N_NORMAL_MEMORY and N_HIGH_MEMORY to distinguish between normal and highmem on platforms such as x86. But we still don't have such a mechanism to distinguish between "normal" and "movable" memory. So for memory nodes with only movable zones, we still set N_NORMAL_MEMORY for them. One possible solution is to add a node mask for "N_NORMAL_OR_MOVABLE_MEMORY", but haven't tried that yet. Will have a try for that. Thanks! Gerry -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>