diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-12 02:58:53 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-12 02:58:53 -0400 |
commit | 3eac8c69d1ac1266327f4e29deb23716a12c6d30 (patch) | |
tree | 0f79bf41c9f7e9e72d7f2827c1810d3815d6f2af /arch/powerpc/mm | |
parent | b6ec995a21a9428aef620b5adf46d047a18d88b8 (diff) |
powerpc: Move default hash table size calculation to hash_utils_64.c
We weren't computing the size of the hash table correctly on iSeries
because the relevant code in prom.c was #ifdef CONFIG_PPC_PSERIES.
This moves the code to hash_utils_64.c, makes it unconditional, and
cleans it up a bit.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r-- | arch/powerpc/mm/hash_utils_64.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 35dd93eeaf4b..6e9e05cce02c 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -155,6 +155,27 @@ static inline void create_pte_mapping(unsigned long start, unsigned long end, | |||
155 | } | 155 | } |
156 | } | 156 | } |
157 | 157 | ||
158 | static unsigned long get_hashtable_size(void) | ||
159 | { | ||
160 | unsigned long rnd_mem_size, pteg_count; | ||
161 | |||
162 | /* If hash size wasn't obtained in prom.c, we calculate it now based on | ||
163 | * the total RAM size | ||
164 | */ | ||
165 | if (ppc64_pft_size) | ||
166 | return 1UL << ppc64_pft_size; | ||
167 | |||
168 | /* round mem_size up to next power of 2 */ | ||
169 | rnd_mem_size = 1UL << __ilog2(systemcfg->physicalMemorySize); | ||
170 | if (rnd_mem_size < systemcfg->physicalMemorySize) | ||
171 | rnd_mem_size <<= 1; | ||
172 | |||
173 | /* # pages / 2 */ | ||
174 | pteg_count = max(rnd_mem_size >> (12 + 1), 1UL << 11); | ||
175 | |||
176 | return pteg_count << 7; | ||
177 | } | ||
178 | |||
158 | void __init htab_initialize(void) | 179 | void __init htab_initialize(void) |
159 | { | 180 | { |
160 | unsigned long table, htab_size_bytes; | 181 | unsigned long table, htab_size_bytes; |
@@ -170,7 +191,7 @@ void __init htab_initialize(void) | |||
170 | * Calculate the required size of the htab. We want the number of | 191 | * Calculate the required size of the htab. We want the number of |
171 | * PTEGs to equal one half the number of real pages. | 192 | * PTEGs to equal one half the number of real pages. |
172 | */ | 193 | */ |
173 | htab_size_bytes = 1UL << ppc64_pft_size; | 194 | htab_size_bytes = get_hashtable_size(); |
174 | pteg_count = htab_size_bytes >> 7; | 195 | pteg_count = htab_size_bytes >> 7; |
175 | 196 | ||
176 | /* For debug, make the HTAB 1/8 as big as it normally would be. */ | 197 | /* For debug, make the HTAB 1/8 as big as it normally would be. */ |