aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-10-30 21:07:02 -0500
committerPaul Mackerras <paulus@samba.org>2005-10-30 21:07:02 -0500
commitcf00a8d18b9a1c2d55b2728e89125c234e821db5 (patch)
tree99425b8acd08aae1e07a7ae31ff47fa18e4e8c91 /arch
parent5f6b5b973a125de0dbe236ce659a495787c81ff0 (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>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/prom.c4
-rw-r--r--arch/powerpc/kernel/setup_64.c9
-rw-r--r--arch/powerpc/mm/mem.c1
-rw-r--r--arch/powerpc/mm/numa.c2
-rw-r--r--arch/powerpc/platforms/iseries/setup.c2
-rw-r--r--arch/ppc64/kernel/prom.c3
6 files changed, 5 insertions, 16 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 6309a1a17c4a..2eccd0e159e3 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -78,15 +78,13 @@ extern struct rtas_t rtas;
78extern struct lmb lmb; 78extern struct lmb lmb;
79extern unsigned long klimit; 79extern unsigned long klimit;
80 80
81static unsigned long memory_limit;
82
83static int __initdata dt_root_addr_cells; 81static int __initdata dt_root_addr_cells;
84static int __initdata dt_root_size_cells; 82static int __initdata dt_root_size_cells;
85 83
86#ifdef CONFIG_PPC64 84#ifdef CONFIG_PPC64
87static int __initdata iommu_is_off; 85static int __initdata iommu_is_off;
88int __initdata iommu_force_on; 86int __initdata iommu_force_on;
89extern unsigned long tce_alloc_start, tce_alloc_end; 87unsigned long tce_alloc_start, tce_alloc_end;
90#endif 88#endif
91 89
92typedef u32 cell_t; 90typedef u32 cell_t;
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 681537f8ea10..40c48100bf1b 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,
631 return NOTIFY_DONE; 631 return NOTIFY_DONE;
632} 632}
633 633
634/*
635 * These three variables are used to save values passed to us by prom_init()
636 * via the device tree. The TCE variables are needed because with a memory_limit
637 * in force we may need to explicitly map the TCE are at the top of RAM.
638 */
639unsigned long memory_limit;
640unsigned long tce_alloc_start;
641unsigned long tce_alloc_end;
642
643#ifdef CONFIG_PPC_ISERIES 634#ifdef CONFIG_PPC_ISERIES
644/* 635/*
645 * On iSeries we just parse the mem=X option from the command line. 636 * 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 3ca331728d21..e43e8ef70088 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -59,6 +59,7 @@
59 59
60int init_bootmem_done; 60int init_bootmem_done;
61int mem_init_done; 61int mem_init_done;
62unsigned long memory_limit;
62 63
63/* 64/*
64 * This is called by /dev/mem to know if a given address has to 65 * 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 cb864b8f2750..4035cad8d7f1 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -20,6 +20,7 @@
20#include <asm/lmb.h> 20#include <asm/lmb.h>
21#include <asm/machdep.h> 21#include <asm/machdep.h>
22#include <asm/abs_addr.h> 22#include <asm/abs_addr.h>
23#include <asm/system.h>
23 24
24static int numa_enabled = 1; 25static int numa_enabled = 1;
25 26
@@ -300,7 +301,6 @@ static unsigned long __init numa_enforce_memory_limit(unsigned long start, unsig
300 * we've already adjusted it for the limit and it takes care of 301 * we've already adjusted it for the limit and it takes care of
301 * having memory holes below the limit. 302 * having memory holes below the limit.
302 */ 303 */
303 extern unsigned long memory_limit;
304 304
305 if (! memory_limit) 305 if (! memory_limit)
306 return size; 306 return size;
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c
index b27901481782..1544c6f10a38 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)
302 302
303static void __init iSeries_init_early(void) 303static void __init iSeries_init_early(void)
304{ 304{
305 extern unsigned long memory_limit;
306
307 DBG(" -> iSeries_init_early()\n"); 305 DBG(" -> iSeries_init_early()\n");
308 306
309 ppc64_firmware_features = FW_FEATURE_ISERIES; 307 ppc64_firmware_features = FW_FEATURE_ISERIES;
diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c
index cd41a47dd43f..97bfceb5353b 100644
--- a/arch/ppc64/kernel/prom.c
+++ b/arch/ppc64/kernel/prom.c
@@ -83,6 +83,8 @@ static int __initdata dt_root_addr_cells;
83static int __initdata dt_root_size_cells; 83static int __initdata dt_root_size_cells;
84static int __initdata iommu_is_off; 84static int __initdata iommu_is_off;
85int __initdata iommu_force_on; 85int __initdata iommu_force_on;
86unsigned long tce_alloc_start, tce_alloc_end;
87
86typedef u32 cell_t; 88typedef u32 cell_t;
87 89
88#if 0 90#if 0
@@ -1063,7 +1065,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node,
1063{ 1065{
1064 u32 *prop; 1066 u32 *prop;
1065 u64 *prop64; 1067 u64 *prop64;
1066 extern unsigned long tce_alloc_start, tce_alloc_end;
1067 1068
1068 DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname); 1069 DBG("search \"chosen\", depth: %d, uname: %s\n", depth, uname);
1069 1070