Skip to content

Commit

Permalink
sparc32: split ramdisk detection and reservation to a helper function
Browse files Browse the repository at this point in the history
The detection and reservation of ramdisk memory were separated to allow
bootmem bitmap initialization after the ramdisk boundaries are detected.
Since the bootmem initialization is removed, the reservation of ramdisk
memory is done immediately after its boundaries are found.

Split the entire block into a separate helper function.

Signed-off-by: Mike Rapoport <[email protected]>
Suggested-by: Sam Ravnborg <[email protected]>
Reviewed-by: Sam Ravnborg <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
rppt authored and davem330 committed Aug 21, 2018
1 parent cca079e commit 8818d89
Showing 1 changed file with 31 additions and 25 deletions.
56 changes: 31 additions & 25 deletions arch/sparc/mm/init_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,36 @@ static unsigned long calc_max_low_pfn(void)
return tmp;
}

static void __init find_ramdisk(unsigned long end_of_phys_memory)
{
#ifdef CONFIG_BLK_DEV_INITRD
unsigned long size;

/* Now have to check initial ramdisk, so that it won't pass
* the end of memory
*/
if (sparc_ramdisk_image) {
if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
sparc_ramdisk_image -= KERNBASE;
initrd_start = sparc_ramdisk_image + phys_base;
initrd_end = initrd_start + sparc_ramdisk_size;
if (initrd_end > end_of_phys_memory) {
printk(KERN_CRIT "initrd extends beyond end of memory "
"(0x%016lx > 0x%016lx)\ndisabling initrd\n",
initrd_end, end_of_phys_memory);
initrd_start = 0;
} else {
/* Reserve the initrd image area. */
size = initrd_end - initrd_start;
memblock_reserve(initrd_start, size);

initrd_start = (initrd_start - phys_base) + PAGE_OFFSET;
initrd_end = (initrd_end - phys_base) + PAGE_OFFSET;
}
}
#endif
}

unsigned long __init bootmem_init(unsigned long *pages_avail)
{
unsigned long start_pfn, bytes_avail, size;
Expand Down Expand Up @@ -160,32 +190,8 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
high_pages >> (20 - PAGE_SHIFT));
}

#ifdef CONFIG_BLK_DEV_INITRD
/* Now have to check initial ramdisk, so that it won't pass
* the end of memory
*/
if (sparc_ramdisk_image) {
if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
sparc_ramdisk_image -= KERNBASE;
initrd_start = sparc_ramdisk_image + phys_base;
initrd_end = initrd_start + sparc_ramdisk_size;
if (initrd_end > end_of_phys_memory) {
printk(KERN_CRIT "initrd extends beyond end of memory "
"(0x%016lx > 0x%016lx)\ndisabling initrd\n",
initrd_end, end_of_phys_memory);
initrd_start = 0;
}
}

if (initrd_start) {
/* Reserve the initrd image area. */
size = initrd_end - initrd_start;
memblock_reserve(initrd_start, size);
find_ramdisk(end_of_phys_memory);

initrd_start = (initrd_start - phys_base) + PAGE_OFFSET;
initrd_end = (initrd_end - phys_base) + PAGE_OFFSET;
}
#endif
/* Reserve the kernel text/data/bss. */
size = (start_pfn << PAGE_SHIFT) - phys_base;
memblock_reserve(phys_base, size);
Expand Down

0 comments on commit 8818d89

Please sign in to comment.