diff options
Diffstat (limited to 'mm/bootmem.c')
| -rw-r--r-- | mm/bootmem.c | 14 | 
1 files changed, 11 insertions, 3 deletions
| diff --git a/mm/bootmem.c b/mm/bootmem.c index f82f7aebbee3..c1330cc19783 100644 --- a/mm/bootmem.c +++ b/mm/bootmem.c @@ -33,6 +33,14 @@ EXPORT_SYMBOL(max_pfn);		/* This is exported so  				 * dma_get_required_mask(), which uses  				 * it, can be an inline function */ +#ifdef CONFIG_CRASH_DUMP +/* + * If we have booted due to a crash, max_pfn will be a very low value. We need + * to know the amount of memory that the previous kernel used. + */ +unsigned long saved_max_pfn; +#endif +  /* return the number of _pages_ that will be allocated for the boot bitmap */  unsigned long __init bootmem_bootmap_pages (unsigned long pages)  { @@ -57,7 +65,7 @@ static unsigned long __init init_bootmem_core (pg_data_t *pgdat,  	pgdat->pgdat_next = pgdat_list;  	pgdat_list = pgdat; -	mapsize = (mapsize + (sizeof(long) - 1UL)) & ~(sizeof(long) - 1UL); +	mapsize = ALIGN(mapsize, sizeof(long));  	bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);  	bdata->node_boot_start = (start << PAGE_SHIFT);  	bdata->node_low_pfn = end; @@ -178,7 +186,7 @@ __alloc_bootmem_core(struct bootmem_data *bdata, unsigned long size,  	} else  		preferred = 0; -	preferred = ((preferred + align - 1) & ~(align - 1)) >> PAGE_SHIFT; +	preferred = ALIGN(preferred, align) >> PAGE_SHIFT;  	preferred += offset;  	areasize = (size+PAGE_SIZE-1)/PAGE_SIZE;  	incr = align >> PAGE_SHIFT ? : 1; @@ -219,7 +227,7 @@ found:  	 */  	if (align < PAGE_SIZE &&  	    bdata->last_offset && bdata->last_pos+1 == start) { -		offset = (bdata->last_offset+align-1) & ~(align-1); +		offset = ALIGN(bdata->last_offset, align);  		BUG_ON(offset > PAGE_SIZE);  		remaining_size = PAGE_SIZE-offset;  		if (size < remaining_size) { | 
