[PATCH] Remove bogus warning in page_alloc.c
Originally __free_pages_bulk used the relative page number within a zone to define its buddies. This meant that to maintain the "maximally aligned" requirements (that an allocation of size N will be aligned at least to N physically) zones had to also be aligned to 1<<MAX_ORDER pages. When __free_pages_bulk was updated to use the relative page frame numbers of the free'd pages to pair buddies this released the alignment constraint on the 'left' edge of the zone. This allows _either_ edge of the zone to contain partial MAX_ORDER sized buddies. These simply never will have matching buddies and thus will never make it to the 'top' of the pyramid. The patch below removes a now redundant check ensuring that the mem_map was aligned to MAX_ORDER. Signed-off-by: Andy Whitcroft <apw@shadowen.org> Cc: Christoph Lameter <christoph@lameter.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
165cd40235
commit
12b1c5f382
@ -1861,7 +1861,6 @@ static void __init free_area_init_core(struct pglist_data *pgdat,
|
|||||||
unsigned long *zones_size, unsigned long *zholes_size)
|
unsigned long *zones_size, unsigned long *zholes_size)
|
||||||
{
|
{
|
||||||
unsigned long i, j;
|
unsigned long i, j;
|
||||||
const unsigned long zone_required_alignment = 1UL << (MAX_ORDER-1);
|
|
||||||
int cpu, nid = pgdat->node_id;
|
int cpu, nid = pgdat->node_id;
|
||||||
unsigned long zone_start_pfn = pgdat->node_start_pfn;
|
unsigned long zone_start_pfn = pgdat->node_start_pfn;
|
||||||
|
|
||||||
@ -1934,9 +1933,6 @@ static void __init free_area_init_core(struct pglist_data *pgdat,
|
|||||||
zone->zone_mem_map = pfn_to_page(zone_start_pfn);
|
zone->zone_mem_map = pfn_to_page(zone_start_pfn);
|
||||||
zone->zone_start_pfn = zone_start_pfn;
|
zone->zone_start_pfn = zone_start_pfn;
|
||||||
|
|
||||||
if ((zone_start_pfn) & (zone_required_alignment-1))
|
|
||||||
printk(KERN_CRIT "BUG: wrong zone alignment, it will crash\n");
|
|
||||||
|
|
||||||
memmap_init(size, nid, j, zone_start_pfn);
|
memmap_init(size, nid, j, zone_start_pfn);
|
||||||
|
|
||||||
zonetable_add(zone, nid, j, zone_start_pfn, size);
|
zonetable_add(zone, nid, j, zone_start_pfn, size);
|
||||||
|
Loading…
Reference in New Issue
Block a user