I have a requirement to test all available pages(memory) on ia64 platform and this is how am going forward. AFAIK, Linux is available for a wide range of architectures so there needs to be an architecture-independent way of describing memory and so the physical memory is described in terms of bank-->nodes-> zones.
On IA64 we have only 2 zones, namely ZONE_DMA and ZONE_NORMAL.
ZONE_DMA range is till 4GB and ZONE_NORMAL above 4GB till end.
As per my requiremnt I have to restrict the ZONE_DMA size to only 512 MB and use the rest of the physical memory for my testing purpose. Note that all processes that gets created after restricting the ZONE_DMA size to 512 should get memory(physical pages) allocated from this zone(DMA) only and my test tool/program should have access to memory- 512MB and above.
To achieve this I modified the kernel source , by restricting the MAX_DMA_ADDRESS = PAGE_OFFSET + 512MB and __alloc_pages() to get the pages from ZONE_DMA only. Also, The kernel swap to disk mechanism, kswapd was modifed to not to swap pages from 512MB for our test tool.After this when I ran my test tool I found that, the first page I am getting was not from 512MB( corresponding to 0x20000000 physical address). Am I going in the right direction??
Also, I want to know whether my assumption was correct in taking the architecture-independent way of describing the phsical memory for ia64???
How does the physical memory layout description changes with chip set?
Any other ideas to implement my requirement are also welcome.