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 /arch/powerpc | |
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>
Diffstat (limited to 'arch/powerpc')
-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 |
5 files changed, 3 insertions, 15 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; |