diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:07:02 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:07:02 -0500 |
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 6309a1a17c4a..2eccd0e159e3 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -78,15 +78,13 @@ extern struct rtas_t rtas; | |||
78 | extern struct lmb lmb; | 78 | extern struct lmb lmb; |
79 | extern unsigned long klimit; | 79 | extern unsigned long klimit; |
80 | 80 | ||
81 | static unsigned long memory_limit; | ||
82 | |||
83 | static int __initdata dt_root_addr_cells; | 81 | static int __initdata dt_root_addr_cells; |
84 | static int __initdata dt_root_size_cells; | 82 | static int __initdata dt_root_size_cells; |
85 | 83 | ||
86 | #ifdef CONFIG_PPC64 | 84 | #ifdef CONFIG_PPC64 |
87 | static int __initdata iommu_is_off; | 85 | static int __initdata iommu_is_off; |
88 | int __initdata iommu_force_on; | 86 | int __initdata iommu_force_on; |
89 | extern unsigned long tce_alloc_start, tce_alloc_end; | 87 | unsigned long tce_alloc_start, tce_alloc_end; |
90 | #endif | 88 | #endif |
91 | 89 | ||
92 | typedef u32 cell_t; | 90 | typedef 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 | */ | ||
639 | unsigned long memory_limit; | ||
640 | unsigned long tce_alloc_start; | ||
641 | unsigned 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 | ||
60 | int init_bootmem_done; | 60 | int init_bootmem_done; |
61 | int mem_init_done; | 61 | int mem_init_done; |
62 | unsigned 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 | ||
24 | static int numa_enabled = 1; | 25 | static 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 | ||
303 | static void __init iSeries_init_early(void) | 303 | static 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; | |||
83 | static int __initdata dt_root_size_cells; | 83 | static int __initdata dt_root_size_cells; |
84 | static int __initdata iommu_is_off; | 84 | static int __initdata iommu_is_off; |
85 | int __initdata iommu_force_on; | 85 | int __initdata iommu_force_on; |
86 | unsigned long tce_alloc_start, tce_alloc_end; | ||
87 | |||
86 | typedef u32 cell_t; | 88 | typedef 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 | ||
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index e926e43c4ae6..5b2ecbc47907 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, | |||
179 | 179 | ||
180 | extern unsigned int rtas_data; | 180 | extern unsigned int rtas_data; |
181 | extern int mem_init_done; /* set on boot once kmalloc can be called */ | 181 | extern int mem_init_done; /* set on boot once kmalloc can be called */ |
182 | extern unsigned long memory_limit; | ||
182 | 183 | ||
183 | extern int powersave_nap; /* set if nap mode can be used in idle loop */ | 184 | extern int powersave_nap; /* set if nap mode can be used in idle loop */ |
184 | 185 | ||
diff --git a/include/asm-ppc64/system.h b/include/asm-ppc64/system.h index fd7c1f890c45..99b8ca52f101 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) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | extern int mem_init_done; /* set on boot once kmalloc can be called */ | 138 | extern int mem_init_done; /* set on boot once kmalloc can be called */ |
139 | extern unsigned long memory_limit; | ||
139 | 140 | ||
140 | /* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */ | 141 | /* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */ |
141 | extern unsigned char e2a(unsigned char); | 142 | extern unsigned char e2a(unsigned char); |