linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@c-s.fr>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>,
	npiggin@gmail.com, paulus@samba.org, mpe@ellerman.id.au
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v3 5/6] powerpc/mm: Reduce memory usage for mm_context_t for radix
Date: Wed, 24 Apr 2019 14:54:09 +0200	[thread overview]
Message-ID: <76af2dbb-96bb-d5e6-fe65-a8ca87e2e268@c-s.fr> (raw)
In-Reply-To: <20190417130351.3805-6-aneesh.kumar@linux.ibm.com>



Le 17/04/2019 à 15:03, Aneesh Kumar K.V a écrit :
> Currently, our mm_context_t on book3s64 include all hash specific
> context details like slice mask and subpage protection details. We
> can skip allocating these with radix translation. This will help us to save
> 8K per mm_context with radix translation.
> 
> With the patch applied we have
> 
> sizeof(mm_context_t)  = 136
> sizeof(struct hash_mm_context)  = 8288
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
>   arch/powerpc/include/asm/book3s/64/mmu-hash.h | 33 ++++++++++++-
>   arch/powerpc/include/asm/book3s/64/mmu.h      | 49 +++++--------------
>   arch/powerpc/kernel/setup-common.c            |  6 +++
>   arch/powerpc/mm/hash_utils_64.c               |  4 +-
>   arch/powerpc/mm/mmu_context_book3s64.c        | 16 +++++-
>   5 files changed, 68 insertions(+), 40 deletions(-)
> 

[...]

> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
> index a07de8608484..21b1ce200b22 100644
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -947,6 +947,12 @@ void __init setup_arch(char **cmdline_p)
>   	init_mm.end_data = (unsigned long) _edata;
>   	init_mm.brk = klimit;
>   
> +#ifdef CONFIG_PPC_MM_SLICES
> +#if defined(CONFIG_PPC_8xx)
> +	init_mm.context.slb_addr_limit = DEFAULT_MAP_WINDOW;
> +#endif
> +#endif
> +

In the previous patch, you moved the above into early_init_mmu(). Why 
bringing it back here ?

Christophe

>   #ifdef CONFIG_SPAPR_TCE_IOMMU
>   	mm_iommu_init(&init_mm);
>   #endif
> diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
> index 2cb3a456f5b5..04ac7c36d380 100644
> --- a/arch/powerpc/mm/hash_utils_64.c
> +++ b/arch/powerpc/mm/hash_utils_64.c
> @@ -968,6 +968,7 @@ void __init hash__early_init_devtree(void)
>   	htab_scan_page_sizes();
>   }
>   
> +struct hash_mm_context init_hash_mm_context;
>   void __init hash__early_init_mmu(void)
>   {
>   #ifndef CONFIG_PPC_64K_PAGES
> @@ -1041,7 +1042,8 @@ void __init hash__early_init_mmu(void)
>   	 */
>   	htab_initialize();
>   
> -	init_mm.context.slb_addr_limit = DEFAULT_MAP_WINDOW_USER64;
> +	init_mm.context.hash_context = &init_hash_mm_context;
> +	init_mm.context.hash_context->slb_addr_limit = DEFAULT_MAP_WINDOW_USER64;
>   
>   	pr_info("Initializing hash mmu with SLB\n");
>   	/* Initialize SLB management */
> diff --git a/arch/powerpc/mm/mmu_context_book3s64.c b/arch/powerpc/mm/mmu_context_book3s64.c
> index f720c5cc0b5e..6eef5a36b2e9 100644
> --- a/arch/powerpc/mm/mmu_context_book3s64.c
> +++ b/arch/powerpc/mm/mmu_context_book3s64.c
> @@ -63,6 +63,12 @@ static int hash__init_new_context(struct mm_struct *mm)
>   	if (index < 0)
>   		return index;
>   
> +	mm->context.hash_context = kmalloc(sizeof(struct hash_mm_context), GFP_KERNEL);
> +	if (!mm->context.hash_context) {
> +		ida_free(&mmu_context_ida, index);
> +		return -ENOMEM;
> +	}
> +
>   	/*
>   	 * The old code would re-promote on fork, we don't do that when using
>   	 * slices as it could cause problem promoting slices that have been
> @@ -77,8 +83,14 @@ static int hash__init_new_context(struct mm_struct *mm)
>   	 * We should not be calling init_new_context() on init_mm. Hence a
>   	 * check against 0 is OK.
>   	 */
> -	if (mm->context.id == 0)
> +	if (mm->context.id == 0) {
> +		memset(mm->context.hash_context, 0, sizeof(struct hash_mm_context));
>   		slice_init_new_context_exec(mm);
> +	} else {
> +		/* This is fork. Copy hash_context details from current->mm */
> +		memcpy(mm->context.hash_context, current->mm->context.hash_context, sizeof(struct hash_mm_context));
> +
> +	}
>   
>   	subpage_prot_init_new_context(mm);
>   
> @@ -118,6 +130,7 @@ static int radix__init_new_context(struct mm_struct *mm)
>   	asm volatile("ptesync;isync" : : : "memory");
>   
>   	mm->context.npu_context = NULL;
> +	mm->context.hash_context = NULL;
>   
>   	return index;
>   }
> @@ -162,6 +175,7 @@ static void destroy_contexts(mm_context_t *ctx)
>   		if (context_id)
>   			ida_free(&mmu_context_ida, context_id);
>   	}
> +	kfree(ctx->hash_context);
>   }
>   
>   static void pmd_frag_destroy(void *pmd_frag)
> 

  reply	other threads:[~2019-04-24 12:56 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-17 13:03 [PATCH v3 0/6] Reduce memory usage for mm_context_t Aneesh Kumar K.V
2019-04-17 13:03 ` [PATCH v3 1/6] powerpc/mm/radix: Do slb preload only with hash translation mode Aneesh Kumar K.V
2019-04-17 13:03 ` [PATCH v3 2/6] powerpc/mm: Remove PPC_MM_SLICES #ifdef for book3s64 Aneesh Kumar K.V
2019-04-21 14:19   ` [v3,2/6] " Michael Ellerman
2019-04-17 13:03 ` [PATCH v3 3/6] powerpc/mm: Add helpers for accessing hash translation related variables Aneesh Kumar K.V
2019-04-24 10:16   ` Christophe Leroy
2019-04-17 13:03 ` [PATCH v3 4/6] powerpc/mm: Move slb_addr_linit to early_init_mmu Aneesh Kumar K.V
2019-04-17 13:03 ` [PATCH v3 5/6] powerpc/mm: Reduce memory usage for mm_context_t for radix Aneesh Kumar K.V
2019-04-24 12:54   ` Christophe Leroy [this message]
2019-04-26  4:50     ` Aneesh Kumar K.V
2019-04-17 13:03 ` [PATCH v3 6/6] powerc/mm/hash: Reduce hash_mm_context size Aneesh Kumar K.V

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=76af2dbb-96bb-d5e6-fe65-a8ca87e2e268@c-s.fr \
    --to=christophe.leroy@c-s.fr \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).