This patch declares most of the structures needed by fragmentation avoidance and associated macros. There are two things of note in this patch. 1. free_area_usemap is in the zone information by default and in the mem_section for CONFIG_SPARSEMEM. This is done to be more efficient for both memory hotplug add and memory hotplug remove, which add and remove sections. With the macros this placement should be transparent. 2. free_area_usemap requires > 32 bits and < 64 bits for all known architectures and possible configurations, a compile time check has been added to make sure future architectures still have this property. Originally authored by Mel Gorman and heavily modified by me. Signed-off-by: Mel Gorman Signed-off-by: Joel Schopp