Hello all, I can't undestand one thing in kernel source, so if anybody has information about it, please sched the light on it. There is a max_pfn variable. According to the comment this is "the highest page frame number we have available" It is calculated on x86 while iterating over memory regions: for (i = 0; i < e820.nr_map; i++) { unsigned long start, end; /* RAM? */ if (e820.map[i].type != E820_RAM) continue; start = PFN_UP(e820.map[i].addr); end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); if (start >= end) continue; if (end > max_pfn) max_pfn = end; memory_present(0, start, end); } 4GB RAM is installed on my node, 32 bit kernel, 4 * 1024 * 1024 / 4 = 1024 * 1024 = 1048576 page frames. Page frames are counted starting from 0, so, I suppose, max_pfn should equal 1048575. However on my real node max_pfn = 1048576. I think, that we should change end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); to end = PFN_DOWN(e820.map[i].addr + e820.map[i].size - 1); What do you think about it, do I miss something? Thanks. -- Vasily Tarasov, tarasov.vasily@xxxxxxxxx -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/