From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: David Gibson <david@gibson.dropbear.id.au>,
mpe@ellerman.id.au, paulus@samba.org, benh@kernel.crashing.org
Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH 4/4] powerpc/mm: Split hash page table sizing heuristic into a helper
Date: Wed, 10 Feb 2016 14:31:00 +0530 [thread overview]
Message-ID: <871t8lx7lf.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <1454988763-5580-5-git-send-email-david@gibson.dropbear.id.au>
David Gibson <david@gibson.dropbear.id.au> writes:
> htab_get_table_size() either retrieve the size of the hash page table (HPT)
> from the device tree - if the HPT size is determined by firmware - or
> uses a heuristic to determine a good size based on RAM size if the kernel
> is responsible for allocating the HPT.
>
> To support a PAPR extension allowing resizing of the HPT, we're going to
> want the memory size -> HPT size logic elsewhere, so split it out into a
> helper function.
>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> arch/powerpc/include/asm/mmu-hash64.h | 3 +++
> arch/powerpc/mm/hash_utils_64.c | 32 +++++++++++++++++++-------------
> 2 files changed, 22 insertions(+), 13 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/mmu-hash64.h b/arch/powerpc/include/asm/mmu-hash64.h
> index 7352d3f..cf070fd 100644
> --- a/arch/powerpc/include/asm/mmu-hash64.h
> +++ b/arch/powerpc/include/asm/mmu-hash64.h
> @@ -607,6 +607,9 @@ static inline unsigned long get_kernel_vsid(unsigned long ea, int ssize)
> context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1;
> return get_vsid(context, ea, ssize);
> }
> +
> +unsigned htab_shift_for_mem_size(unsigned long mem_size);
> +
> #endif /* __ASSEMBLY__ */
>
> #endif /* _ASM_POWERPC_MMU_HASH64_H_ */
> diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
> index fdcf9d1..da5d279 100644
> --- a/arch/powerpc/mm/hash_utils_64.c
> +++ b/arch/powerpc/mm/hash_utils_64.c
> @@ -611,10 +611,26 @@ static int __init htab_dt_scan_pftsize(unsigned long node,
> return 0;
> }
>
> -static unsigned long __init htab_get_table_size(void)
> +unsigned htab_shift_for_mem_size(unsigned long mem_size)
> {
> - unsigned long mem_size, rnd_mem_size, pteg_count, psize;
> + unsigned memshift = __ilog2(mem_size);
> + unsigned pshift = mmu_psize_defs[mmu_virtual_psize].shift;
> + unsigned pteg_shift;
> +
> + /* round mem_size up to next power of 2 */
> + if ((1UL << memshift) < mem_size)
> + memshift += 1;
> +
> + /* aim for 2 pages / pteg */
> + pteg_shift = memshift - (pshift + 1);
> +
> + /* 2^11 PTEGS / 2^18 bytes is the minimum htab size permitted
> + * by the architecture */
> + return max(pteg_shift + 7, 18U);
> +}
>
> +static unsigned long __init htab_get_table_size(void)
> +{
> /* If hash size isn't already provided by the platform, we try to
> * retrieve it from the device-tree. If it's not there neither, we
> * calculate it now based on the total RAM size
> @@ -624,17 +640,7 @@ static unsigned long __init htab_get_table_size(void)
> if (ppc64_pft_size)
> return 1UL << ppc64_pft_size;
>
> - /* round mem_size up to next power of 2 */
> - mem_size = memblock_phys_mem_size();
> - rnd_mem_size = 1UL << __ilog2(mem_size);
> - if (rnd_mem_size < mem_size)
> - rnd_mem_size <<= 1;
> -
> - /* # pages / 2 */
> - psize = mmu_psize_defs[mmu_virtual_psize].shift;
> - pteg_count = max(rnd_mem_size >> (psize + 1), 1UL << 11);
> -
> - return pteg_count << 7;
> + return 1UL << htab_shift_for_mem_size(memblock_phys_mem_size());
> }
>
> #ifdef CONFIG_MEMORY_HOTPLUG
> --
> 2.5.0
next prev parent reply other threads:[~2016-02-10 9:01 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-09 3:32 [PATCH 0/4] powerpc/mm: Cleanups to hotplug memory path David Gibson
2016-02-09 3:32 ` [PATCH 1/4] powerpc/mm: Clean up error handling for htab_remove_mapping David Gibson
2016-02-10 8:56 ` Aneesh Kumar K.V
2016-03-01 22:21 ` [1/4] " Michael Ellerman
2016-02-09 3:32 ` [PATCH 2/4] powerpc/mm: Handle removing maybe-present bolted HPTEs David Gibson
2016-02-10 8:58 ` Aneesh Kumar K.V
2016-03-01 22:21 ` [2/4] " Michael Ellerman
2016-02-09 3:32 ` [PATCH 3/4] powerpc/mm: Clean up memory hotplug failure paths David Gibson
2016-02-10 9:00 ` Aneesh Kumar K.V
2016-03-01 1:59 ` [3/4] " Michael Ellerman
2016-03-01 2:27 ` David Gibson
2016-03-01 22:21 ` Michael Ellerman
2016-02-09 3:32 ` [PATCH 4/4] powerpc/mm: Split hash page table sizing heuristic into a helper David Gibson
2016-02-10 9:01 ` Aneesh Kumar K.V [this message]
2016-03-01 22:21 ` [4/4] " Michael Ellerman
2016-03-01 23:26 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871t8lx7lf.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=david@gibson.dropbear.id.au \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.