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 | |
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')
-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 |
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; | |||
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 | ||