Commit b4819b59 authored by Yoichi Yuasa's avatar Yoichi Yuasa Committed by Linus Torvalds

[PATCH] mips: add MIPS-specific support for flatmem/discontigmem

2.6.12-git6 doesn't boot on some MIPS machines.  They need the support of flat
memory and discontig memory.
Signed-off-by: default avatarYoichi Yuasa <yuasa@hh.iij4u.or.jp>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7919a693
...@@ -1416,6 +1416,12 @@ config HIGHMEM ...@@ -1416,6 +1416,12 @@ config HIGHMEM
bool "High Memory Support" bool "High Memory Support"
depends on MIPS32 && (CPU_R3000 || CPU_SB1 || CPU_R7000 || CPU_RM9000 || CPU_R10000) && !(MACH_DECSTATION || MOMENCO_JAGUAR_ATX) depends on MIPS32 && (CPU_R3000 || CPU_SB1 || CPU_R7000 || CPU_RM9000 || CPU_R10000) && !(MACH_DECSTATION || MOMENCO_JAGUAR_ATX)
config ARCH_FLATMEM_ENABLE
def_bool y
depends on !NUMA
source "mm/Kconfig"
config SMP config SMP
bool "Multi-Processing support" bool "Multi-Processing support"
depends on CPU_RM9000 || (SIBYTE_SB1250 && !SIBYTE_STANDALONE) || SGI_IP27 depends on CPU_RM9000 || (SIBYTE_SB1250 && !SIBYTE_STANDALONE) || SGI_IP27
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/highmem.h> #include <linux/highmem.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/mmzone.h>
#include <asm/addrspace.h> #include <asm/addrspace.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
...@@ -356,6 +357,8 @@ static inline void bootmem_init(void) ...@@ -356,6 +357,8 @@ static inline void bootmem_init(void)
} }
#endif #endif
memory_present(0, first_usable_pfn, max_low_pfn);
/* Initialize the boot-time allocator with low memory only. */ /* Initialize the boot-time allocator with low memory only. */
bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn); bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn);
...@@ -557,6 +560,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -557,6 +560,7 @@ void __init setup_arch(char **cmdline_p)
parse_cmdline_early(); parse_cmdline_early();
bootmem_init(); bootmem_init();
sparse_init();
paging_init(); paging_init();
resource_init(); resource_init();
} }
......
...@@ -128,7 +128,7 @@ static void __init fixrange_init(unsigned long start, unsigned long end, ...@@ -128,7 +128,7 @@ static void __init fixrange_init(unsigned long start, unsigned long end,
#endif /* CONFIG_MIPS64 */ #endif /* CONFIG_MIPS64 */
#endif /* CONFIG_HIGHMEM */ #endif /* CONFIG_HIGHMEM */
#ifndef CONFIG_DISCONTIGMEM #ifndef CONFIG_NEED_MULTIPLE_NODES
extern void pagetable_init(void); extern void pagetable_init(void);
void __init paging_init(void) void __init paging_init(void)
...@@ -253,7 +253,7 @@ void __init mem_init(void) ...@@ -253,7 +253,7 @@ void __init mem_init(void)
initsize >> 10, initsize >> 10,
(unsigned long) (totalhigh_pages << (PAGE_SHIFT-10))); (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10)));
} }
#endif /* !CONFIG_DISCONTIGMEM */ #endif /* !CONFIG_NEED_MULTIPLE_NODES */
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end) void free_initrd_mem(unsigned long start, unsigned long end)
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
void show_mem(void) void show_mem(void)
{ {
#ifndef CONFIG_DISCONTIGMEM /* XXX(hch): later.. */ #ifndef CONFIG_NEED_MULTIPLE_NODES /* XXX(hch): later.. */
int pfn, total = 0, reserved = 0; int pfn, total = 0, reserved = 0;
int shared = 0, cached = 0; int shared = 0, cached = 0;
int highmem = 0; int highmem = 0;
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include <asm/page.h> #include <asm/page.h>
#include <mmzone.h> #include <mmzone.h>
#ifdef CONFIG_DISCONTIGMEM
#define kvaddr_to_nid(kvaddr) pa_to_nid(__pa(kvaddr)) #define kvaddr_to_nid(kvaddr) pa_to_nid(__pa(kvaddr))
#define pfn_to_nid(pfn) pa_to_nid((pfn) << PAGE_SHIFT) #define pfn_to_nid(pfn) pa_to_nid((pfn) << PAGE_SHIFT)
...@@ -36,4 +38,6 @@ ...@@ -36,4 +38,6 @@
/* XXX: FIXME -- wli */ /* XXX: FIXME -- wli */
#define kern_addr_valid(addr) (0) #define kern_addr_valid(addr) (0)
#endif /* CONFIG_DISCONTIGMEM */
#endif /* _ASM_MMZONE_H_ */ #endif /* _ASM_MMZONE_H_ */
...@@ -127,7 +127,7 @@ static __inline__ int get_order(unsigned long size) ...@@ -127,7 +127,7 @@ static __inline__ int get_order(unsigned long size)
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#ifndef CONFIG_DISCONTIGMEM #ifndef CONFIG_NEED_MULTIPLE_NODES
#define pfn_to_page(pfn) (mem_map + (pfn)) #define pfn_to_page(pfn) (mem_map + (pfn))
#define page_to_pfn(page) ((unsigned long)((page) - mem_map)) #define page_to_pfn(page) ((unsigned long)((page) - mem_map))
#define pfn_valid(pfn) ((pfn) < max_mapnr) #define pfn_valid(pfn) ((pfn) < max_mapnr)
......
...@@ -350,7 +350,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma, ...@@ -350,7 +350,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
__update_cache(vma, address, pte); __update_cache(vma, address, pte);
} }
#ifndef CONFIG_DISCONTIGMEM #ifndef CONFIG_NEED_MULTIPLE_NODES
#define kern_addr_valid(addr) (1) #define kern_addr_valid(addr) (1)
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment