m68k: switch to MEMBLOCK + NO_BOOTMEM
In m68k the physical memory is described by [memory_start, memory_end] for !MMU variant and by m68k_memory array of memory ranges for the MMU version. This information is directly use to register the physical memory with memblock. The reserve_bootmem() calls are replaced with memblock_reserve() and the bootmap bitmap allocation is simply dropped. Since the MMU variant creates early mappings only for the small part of the memory we force bottom-up allocations in memblock. Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com> Acked-by: Greg Ungerer <gerg@linux-m68k.org> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:

committed by
Geert Uytterhoeven

parent
9e09221957
commit
1008a11590
@@ -21,6 +21,7 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/module.h>
|
||||
@@ -164,6 +165,8 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
|
||||
be32_to_cpu(m->addr);
|
||||
m68k_memory[m68k_num_memory].size =
|
||||
be32_to_cpu(m->size);
|
||||
memblock_add(m68k_memory[m68k_num_memory].addr,
|
||||
m68k_memory[m68k_num_memory].size);
|
||||
m68k_num_memory++;
|
||||
} else
|
||||
pr_warn("%s: too many memory chunks\n",
|
||||
@@ -223,10 +226,6 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
#ifndef CONFIG_SUN3
|
||||
int i;
|
||||
#endif
|
||||
|
||||
/* The bootinfo is located right after the kernel */
|
||||
if (!CPU_IS_COLDFIRE)
|
||||
m68k_parse_bootinfo((const struct bi_record *)_end);
|
||||
@@ -355,14 +354,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SUN3
|
||||
for (i = 1; i < m68k_num_memory; i++)
|
||||
free_bootmem_node(NODE_DATA(i), m68k_memory[i].addr,
|
||||
m68k_memory[i].size);
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
if (m68k_ramdisk.size) {
|
||||
reserve_bootmem_node(__virt_to_node(phys_to_virt(m68k_ramdisk.addr)),
|
||||
m68k_ramdisk.addr, m68k_ramdisk.size,
|
||||
BOOTMEM_DEFAULT);
|
||||
memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size);
|
||||
initrd_start = (unsigned long)phys_to_virt(m68k_ramdisk.addr);
|
||||
initrd_end = initrd_start + m68k_ramdisk.size;
|
||||
pr_info("initrd: %08lx - %08lx\n", initrd_start, initrd_end);
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/initrd.h>
|
||||
@@ -85,8 +86,6 @@ void (*mach_power_off)(void);
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
int bootmap_size;
|
||||
|
||||
memory_start = PAGE_ALIGN(_ramstart);
|
||||
memory_end = _ramend;
|
||||
|
||||
@@ -141,6 +140,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
pr_debug("MEMORY -> ROMFS=0x%p-0x%06lx MEM=0x%06lx-0x%06lx\n ",
|
||||
__bss_stop, memory_start, memory_start, memory_end);
|
||||
|
||||
memblock_add(memory_start, memory_end - memory_start);
|
||||
|
||||
/* Keep a copy of command line */
|
||||
*cmdline_p = &command_line[0];
|
||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
@@ -157,23 +158,10 @@ void __init setup_arch(char **cmdline_p)
|
||||
min_low_pfn = PFN_DOWN(memory_start);
|
||||
max_pfn = max_low_pfn = PFN_DOWN(memory_end);
|
||||
|
||||
bootmap_size = init_bootmem_node(
|
||||
NODE_DATA(0),
|
||||
min_low_pfn, /* map goes here */
|
||||
PFN_DOWN(PAGE_OFFSET),
|
||||
max_pfn);
|
||||
/*
|
||||
* Free the usable memory, we have to make sure we do not free
|
||||
* the bootmem bitmap so we then reserve it after freeing it :-)
|
||||
*/
|
||||
free_bootmem(memory_start, memory_end - memory_start);
|
||||
reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);
|
||||
|
||||
#if defined(CONFIG_UBOOT) && defined(CONFIG_BLK_DEV_INITRD)
|
||||
if ((initrd_start > 0) && (initrd_start < initrd_end) &&
|
||||
(initrd_end < memory_end))
|
||||
reserve_bootmem(initrd_start, initrd_end - initrd_start,
|
||||
BOOTMEM_DEFAULT);
|
||||
memblock_reserve(initrd_start, initrd_end - initrd_start);
|
||||
#endif /* if defined(CONFIG_BLK_DEV_INITRD) */
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user