diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-31 13:07:02 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-31 13:07:02 +1100 |
commit | cf00a8d18b9a1c2d55b2728e89125c234e821db5 (patch) | |
tree | 99425b8acd08aae1e07a7ae31ff47fa18e4e8c91 | |
parent | 5f6b5b973a125de0dbe236ce659a495787c81ff0 (diff) |
powerpc: Fix bug arising from having multiple memory_limit variables
We had a static memory_limit in prom.c, and then another one defined
in setup_64.c and used in numa.c, which resulted in the kernel crashing
when mem=xxx was given on the command line. This puts the declaration
in system.h and the definition in mem.c. This also moves the
definition of tce_alloc_start/end out of setup_64.c.
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/kernel/prom.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 9 | ||||
-rw-r--r-- | arch/powerpc/mm/mem.c | 1 | ||||
-rw-r--r-- | arch/powerpc/mm/numa.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/iseries/setup.c | 2 | ||||
-rw-r--r-- | arch/ppc64/kernel/prom.c | 3 | ||||
-rw-r--r-- | include/asm-powerpc/system.h | 1 | ||||
-rw-r--r-- | include/asm-ppc64/system.h | 1 |
8 files changed, 7 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 6309a1a17c4..2eccd0e159e 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c @@ -78,15 +78,13 @@ extern struct rtas_t rtas; extern struct lmb lmb; extern unsigned long klimit; -static unsigned long memory_limit; - static int __initdata dt_root_addr_cells; static int __initdata dt_root_size_cells; #ifdef CONFIG_PPC64 static int __initdata iommu_is_off; int __initdata iommu_force_on; -extern unsigned long tce_alloc_start, tce_alloc_end; +unsigned long tce_alloc_start, tce_alloc_end; #endif typedef u32 cell_t; diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 681537f8ea1..40c48100bf1 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c @@ -631,15 +631,6 @@ static int ppc64_panic_event(struct notifier_block *this, return NOTIFY_DONE; } -/* - * These three variables are used to save values passed to us by prom_init() - * via the device tree. The TCE variables are needed because with a memory_limit - * in force we may need to explicitly map the TCE are at the top of RAM. - */ -unsigned long memory_limit; -unsigned long tce_alloc_start; -unsigned long tce_alloc_end; - #ifdef CONFIG_PPC_ISERIES /* * On iSeries we just parse the mem=X option from the command line. diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 3ca331728d2..e43e8ef7008 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -59,6 +59,7 @@ int init_bootmem_done; int mem_init_done; +unsigned long memory_limit; /* * This is called by /dev/mem to know if a given address has to diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index cb864b8f275..4035cad8d7f 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -20,6 +20,7 @@ #include <asm/lmb.h> #include <asm/machdep.h> #include <asm/abs_addr.h> +#include <asm/system.h> static int numa_enabled = 1; @@ -300,7 +301,6 @@ static unsigned long __init numa_enforce_memory_limit(unsigned long start, unsig * we've already adjusted it for the limit and it takes care of * having memory holes below the limit. */ - extern unsigned long memory_limit; if (! memory_limit) return size; diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index b2790148178..1544c6f10a3 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c @@ -302,8 +302,6 @@ static void __init iSeries_get_cmdline(void) static void __init iSeries_init_early(void) { - extern unsigned long memory_limit; - DBG(" -> iSeries_init_early()\n"); ppc64_firmware_features = FW_FEATURE_ISERIES; diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c index cd41a47dd43..97bfceb5353 100644 --- a/arch/ppc64/kernel/prom.c +++ b/arch/ppc64/kernel/prom.c @@ -83,6 +83,8 @@ static int __initdata dt_root_addr_cells; static int __initdata dt_root_size_cells; static int __initdata iommu_is_off; int __initdata iommu_force_on; +unsigned long tce_alloc_start, tce_alloc_end; + typedef u32 cell_t; #if 0 @@ -1063,7 +1065,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, { u32 *prop; u64 *prop64; - extern unsigned long tce_alloc_start, tce_alloc_end; DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname); diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index e926e43c4ae..5b2ecbc4790 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h @@ -179,6 +179,7 @@ extern struct task_struct *_switch(struct thread_struct *prev, extern unsigned int rtas_data; extern int mem_init_done; /* set on boot once kmalloc can be called */ +extern unsigned long memory_limit; extern int powersave_nap; /* set if nap mode can be used in idle loop */ diff --git a/include/asm-ppc64/system.h b/include/asm-ppc64/system.h index fd7c1f890c4..99b8ca52f10 100644 --- a/include/asm-ppc64/system.h +++ b/include/asm-ppc64/system.h @@ -136,6 +136,7 @@ static inline void flush_spe_to_thread(struct task_struct *t) } extern int mem_init_done; /* set on boot once kmalloc can be called */ +extern unsigned long memory_limit; /* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */ extern unsigned char e2a(unsigned char); |