Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3eac8c69 authored by Paul Mackerras's avatar Paul Mackerras
Browse files

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: default avatarPaul Mackerras <paulus@samba.org>
parent b6ec995a
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -1323,26 +1323,6 @@ void __init early_init_devtree(void *params)
	 */
	scan_flat_dt(early_init_dt_scan_cpus, NULL);

#ifdef CONFIG_PPC_PSERIES
	/* If hash size wasn't obtained above, we calculate it now based on
	 * the total RAM size
	 */
	if (ppc64_pft_size == 0) {
		unsigned long rnd_mem_size, pteg_count;

		/* round mem_size up to next power of 2 */
		rnd_mem_size = 1UL << __ilog2(systemcfg->physicalMemorySize);
		if (rnd_mem_size < systemcfg->physicalMemorySize)
			rnd_mem_size <<= 1;

		/* # pages / 2 */
		pteg_count = max(rnd_mem_size >> (12 + 1), 1UL << 11);

		ppc64_pft_size = __ilog2(pteg_count << 7);
	}

	DBG("Hash pftSize: %x\n", (int)ppc64_pft_size);
#endif
	DBG(" <- early_init_devtree()\n");
}

+22 −1
Original line number Diff line number Diff line
@@ -155,6 +155,27 @@ static inline void create_pte_mapping(unsigned long start, unsigned long end,
	}
}

static unsigned long get_hashtable_size(void)
{
	unsigned long rnd_mem_size, pteg_count;

	/* If hash size wasn't obtained in prom.c, we calculate it now based on
	 * the total RAM size
	 */
	if (ppc64_pft_size)
		return 1UL << ppc64_pft_size;

	/* round mem_size up to next power of 2 */
	rnd_mem_size = 1UL << __ilog2(systemcfg->physicalMemorySize);
	if (rnd_mem_size < systemcfg->physicalMemorySize)
		rnd_mem_size <<= 1;

	/* # pages / 2 */
	pteg_count = max(rnd_mem_size >> (12 + 1), 1UL << 11);

	return pteg_count << 7;
}

void __init htab_initialize(void)
{
	unsigned long table, htab_size_bytes;
@@ -170,7 +191,7 @@ void __init htab_initialize(void)
	 * Calculate the required size of the htab.  We want the number of
	 * PTEGs to equal one half the number of real pages.
	 */ 
	htab_size_bytes = 1UL << ppc64_pft_size;
	htab_size_bytes = get_hashtable_size();
	pteg_count = htab_size_bytes >> 7;

	/* For debug, make the HTAB 1/8 as big as it normally would be. */