On Fri, 12 Aug 2011, Pintu Agarwal wrote: > On my system I have only DMA zones with 3 nodes as follows: > Node 0, zone DMA 3 4 6 4 5 0 0 0 0 0 0 > Node 1, zone DMA 8 4 3 8 7 4 2 0 0 0 0 > Node 2, zone DMA 10 2 8 3 2 2 4 1 2 2 28 Weird system. One would expect it to only have NORMAL zones. Is this an ARM system? > In __alloc_pages_nodemask(...), just before "First Allocation Attempt" [that is before get_page_from_freelist(....)], I wanted to print all the free pages from the "preferred_zone". > Using something like this : > totalfreepages = zone_page_state(zone, NR_FREE_PAGES); > > But in my case, there is only one zone (DMA) but 3 nodes. > Thus the above "zone_page_state" always returns totalfreepages only from first Node 0. > But the allocation actually happening from Node 2. > > How can we point to the zone of Node 2 to get the actual value? > I am not sure that I understand you correctly but you can get the data from node 2 via zone_page_state(NODE_DATA[2]->node_zones[ZONE_DMA], NR_FREE_PAGES); or in __alloc_pages_nodemask zone_page_state(preferred_zone, NR_FREE_PAGES);