linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [patch 105/147] arm64: switch to generic version of pte allocation
       [not found] <20190712035802.eeH5anzpz%akpm@linux-foundation.org>
@ 2019-07-12 12:49 ` Qian Cai
  2019-07-12 18:20   ` Linus Torvalds
  2019-07-12 21:10   ` Andrew Morton
  0 siblings, 2 replies; 6+ messages in thread
From: Qian Cai @ 2019-07-12 12:49 UTC (permalink / raw)
  To: linux-kernel, akpm, anshuman.khandual, anton.ivanov, aou, arnd,
	catalin.marinas, deanbo422, deller, geert, green.hu, guoren, gxt,
	lftan, linux, mattst88, mhocko, mm-commits, mpe, palmer,
	paul.burton, ralf, ren_guo, richard, rkuo, rppt, sammy, torvalds,
	willy

Actually, this patch is slightly off. There is one delta need to apply (ignore
the part in pgtable.h which has already in mainline via the commit 615c48ad8f42
"arm64/mm: don't initialize pgd_cache twice") in.

https://lore.kernel.org/linux-mm/20190617151252.GF16810@rapoport-lnx/

On Thu, 2019-07-11 at 20:58 -0700, akpm@linux-foundation.org wrote:
> From: Mike Rapoport <rppt@linux.ibm.com>
> Subject: arm64: switch to generic version of pte allocation
> 
> The PTE allocations in arm64 are identical to the generic ones modulo the
> GFP flags.
> 
> Using the generic pte_alloc_one() functions ensures that the user page
> tables are allocated with __GFP_ACCOUNT set.
> 
> The arm64 definition of PGALLOC_GFP is removed and replaced with
> GFP_PGTABLE_USER for p[gum]d_alloc_one() for the user page tables andpgtable.h
> 
> GFP_PGTABLE_KERNEL for the kernel page tables. The KVM memory cache is now
> using GFP_PGTABLE_USER.
> 
> The mappings created with create_pgd_mapping() are now using
> GFP_PGTABLE_KERNEL.
> 
> The conversion to the generic version of pte_free_kernel() removes the NULL
> check for pte.
> 
> The pte_free() version on arm64 is identical to the generic one and
> can be simply dropped.
> 
> [cai@lca.pw: fix a bogus GFP flag in pgd_alloc()]
>   Link: http://lkml.kernel.org/r/1559656836-24940-1-git-send-email-cai@lca.pw
> Link: http://lkml.kernel.org/r/1557296232-15361-5-git-send-email-rppt@linux.ib
> m.com
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> Cc: Albert Ou <aou@eecs.berkeley.edu>
> Cc: Anshuman Khandual <anshuman.khandual@arm.com>
> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: Greentime Hu <green.hu@gmail.com>
> Cc: Guan Xuetao <gxt@pku.edu.cn>
> Cc: Guo Ren <guoren@kernel.org>
> Cc: Guo Ren <ren_guo@c-sky.com>
> Cc: Helge Deller <deller@gmx.de>
> Cc: Ley Foon Tan <lftan@altera.com>
> Cc: Matthew Wilcox <willy@infradead.org>
> Cc: Matt Turner <mattst88@gmail.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Palmer Dabbelt <palmer@sifive.com>
> Cc: Paul Burton <paul.burton@mips.com>
> Cc: Ralf Baechle <ralf@linux-mips.org>
> Cc: Richard Kuo <rkuo@codeaurora.org>
> Cc: Richard Weinberger <richard@nod.at>
> Cc: Russell King <linux@armlinux.org.uk>
> Cc: Sam Creasey <sammy@sammy.net>
> Cc: Vincent Chen <deanbo422@gmail.com>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
> 
>  arch/arm64/include/asm/pgalloc.h |   47 ++++-------------------------
>  arch/arm64/mm/mmu.c              |    2 -
>  arch/arm64/mm/pgd.c              |    9 ++++-
>  virt/kvm/arm/mmu.c               |    2 -
>  4 files changed, 17 insertions(+), 43 deletions(-)
> 
> --- a/arch/arm64/include/asm/pgalloc.h~arm64-switch-to-generic-version-of-pte-
> allocation
> +++ a/arch/arm64/include/asm/pgalloc.h
> @@ -13,18 +13,23 @@
>  #include <asm/cacheflush.h>
>  #include <asm/tlbflush.h>
>  
> +#include <asm-generic/pgalloc.h>	/* for pte_{alloc,free}_one */
> +
>  #define check_pgt_cache()		do { } while (0)
>  
> -#define PGALLOC_GFP	(GFP_KERNEL | __GFP_ZERO)
>  #define PGD_SIZE	(PTRS_PER_PGD * sizeof(pgd_t))
>  
>  #if CONFIG_PGTABLE_LEVELS > 2
>  
>  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
>  {
> +	gfp_t gfp = GFP_PGTABLE_USER;
>  	struct page *page;
>  
> -	page = alloc_page(PGALLOC_GFP);
> +	if (mm == &init_mm)
> +		gfp = GFP_PGTABLE_KERNEL;
> +
> +	page = alloc_page(gfp);
>  	if (!page)
>  		return NULL;
>  	if (!pgtable_pmd_page_ctor(page)) {
> @@ -61,7 +66,7 @@ static inline void __pud_populate(pud_t
>  
>  static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
>  {
> -	return (pud_t *)__get_free_page(PGALLOC_GFP);
> +	return (pud_t *)__get_free_page(GFP_PGTABLE_USER);
>  }
>  
>  static inline void pud_free(struct mm_struct *mm, pud_t *pudp)
> @@ -89,42 +94,6 @@ static inline void __pgd_populate(pgd_t
>  extern pgd_t *pgd_alloc(struct mm_struct *mm);
>  extern void pgd_free(struct mm_struct *mm, pgd_t *pgdp);
>  
> -static inline pte_t *
> -pte_alloc_one_kernel(struct mm_struct *mm)
> -{
> -	return (pte_t *)__get_free_page(PGALLOC_GFP);
> -}
> -
> -static inline pgtable_t
> -pte_alloc_one(struct mm_struct *mm)
> -{
> -	struct page *pte;
> -
> -	pte = alloc_pages(PGALLOC_GFP, 0);
> -	if (!pte)
> -		return NULL;
> -	if (!pgtable_page_ctor(pte)) {
> -		__free_page(pte);
> -		return NULL;
> -	}
> -	return pte;
> -}
> -
> -/*
> - * Free a PTE table.
> - */
> -static inline void pte_free_kernel(struct mm_struct *mm, pte_t *ptep)
> -{
> -	if (ptep)
> -		free_page((unsigned long)ptep);
> -}
> -
> -static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
> -{
> -	pgtable_page_dtor(pte);
> -	__free_page(pte);
> -}
> -
>  static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t ptep,
>  				  pmdval_t prot)
>  {
> --- a/arch/arm64/mm/mmu.c~arm64-switch-to-generic-version-of-pte-allocation
> +++ a/arch/arm64/mm/mmu.c
> @@ -362,7 +362,7 @@ static void __create_pgd_mapping(pgd_t *
>  
>  static phys_addr_t __pgd_pgtable_alloc(int shift)
>  {
> -	void *ptr = (void *)__get_free_page(PGALLOC_GFP);
> +	void *ptr = (void *)__get_free_page(GFP_PGTABLE_KERNEL);
>  	BUG_ON(!ptr);
>  
>  	/* Ensure the zeroed page is visible to the page table walker */
> --- a/arch/arm64/mm/pgd.c~arm64-switch-to-generic-version-of-pte-allocation
> +++ a/arch/arm64/mm/pgd.c
> @@ -19,10 +19,15 @@ static struct kmem_cache *pgd_cache __ro
>  
>  pgd_t *pgd_alloc(struct mm_struct *mm)
>  {
> +	gfp_t gfp = GFP_PGTABLE_USER;
> +
> +	if (unlikely(mm == &init_mm))
> +		gfp = GFP_PGTABLE_KERNEL;
> +
>  	if (PGD_SIZE == PAGE_SIZE)
> -		return (pgd_t *)__get_free_page(PGALLOC_GFP);
> +		return (pgd_t *)__get_free_page(gfp);
>  	else
> -		return kmem_cache_alloc(pgd_cache, PGALLOC_GFP);
> +		return kmem_cache_alloc(pgd_cache, GFP_PGTABLE_KERNEL);
>  }
>  
>  void pgd_free(struct mm_struct *mm, pgd_t *pgd)
> --- a/virt/kvm/arm/mmu.c~arm64-switch-to-generic-version-of-pte-allocation
> +++ a/virt/kvm/arm/mmu.c
> @@ -129,7 +129,7 @@ static int mmu_topup_memory_cache(struct
>  	if (cache->nobjs >= min)
>  		return 0;
>  	while (cache->nobjs < max) {
> -		page = (void *)__get_free_page(PGALLOC_GFP);
> +		page = (void *)__get_free_page(GFP_PGTABLE_USER);
>  		if (!page)
>  			return -ENOMEM;
>  		cache->objects[cache->nobjs++] = page;
> _

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch 105/147] arm64: switch to generic version of pte allocation
  2019-07-12 12:49 ` [patch 105/147] arm64: switch to generic version of pte allocation Qian Cai
@ 2019-07-12 18:20   ` Linus Torvalds
  2019-07-12 19:53     ` Linus Torvalds
  2019-07-12 21:10   ` Andrew Morton
  1 sibling, 1 reply; 6+ messages in thread
From: Linus Torvalds @ 2019-07-12 18:20 UTC (permalink / raw)
  To: Qian Cai
  Cc: Linux List Kernel Mailing, Andrew Morton, anshuman.khandual,
	Anton Ivanov, aou, Arnd Bergmann, Catalin Marinas, deanbo422,
	deller, Geert Uytterhoeven, Greentime Hu, Guo Ren, Guan Xuetao,
	Ley Foon Tan, Russell King - ARM Linux, Matt Turner,
	Michal Hocko, mm-commits, Michael Ellerman, Palmer Dabbelt,
	Paul Burton, ralf, Guo Ren, Richard Weinberger, Richard Kuo,
	rppt, sammy, Matthew Wilcox

On Fri, Jul 12, 2019 at 5:49 AM Qian Cai <cai@lca.pw> wrote:
>
> Actually, this patch is slightly off. There is one delta need to apply (ignore
> the part in pgtable.h which has already in mainline via the commit 615c48ad8f42
> "arm64/mm: don't initialize pgd_cache twice") in.
>
> https://lore.kernel.org/linux-mm/20190617151252.GF16810@rapoport-lnx/

I fixed it up, hopefully correctly.

                Linus

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch 105/147] arm64: switch to generic version of pte allocation
  2019-07-12 18:20   ` Linus Torvalds
@ 2019-07-12 19:53     ` Linus Torvalds
  0 siblings, 0 replies; 6+ messages in thread
From: Linus Torvalds @ 2019-07-12 19:53 UTC (permalink / raw)
  To: Qian Cai
  Cc: Linux List Kernel Mailing, Andrew Morton, anshuman.khandual,
	Anton Ivanov, aou, Arnd Bergmann, Catalin Marinas, deanbo422,
	deller, Geert Uytterhoeven, Greentime Hu, Guo Ren, Guan Xuetao,
	Ley Foon Tan, Russell King - ARM Linux, Matt Turner,
	Michal Hocko, mm-commits, Michael Ellerman, Palmer Dabbelt,
	Paul Burton, ralf, Guo Ren, Richard Weinberger, Richard Kuo,
	rppt, sammy, Matthew Wilcox

On Fri, Jul 12, 2019 at 11:20 AM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> I fixed it up, hopefully correctly.

.. and it's pushed out now so you can all point and laugh at me.

            Linus

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch 105/147] arm64: switch to generic version of pte allocation
  2019-07-12 12:49 ` [patch 105/147] arm64: switch to generic version of pte allocation Qian Cai
  2019-07-12 18:20   ` Linus Torvalds
@ 2019-07-12 21:10   ` Andrew Morton
  2019-07-12 21:35     ` Linus Torvalds
  1 sibling, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2019-07-12 21:10 UTC (permalink / raw)
  To: Qian Cai
  Cc: linux-kernel, anshuman.khandual, anton.ivanov, aou, arnd,
	catalin.marinas, deanbo422, deller, geert, green.hu, guoren, gxt,
	lftan, linux, mattst88, mhocko, mm-commits, mpe, palmer,
	paul.burton, ralf, ren_guo, richard, rkuo, rppt, sammy, torvalds,
	willy

On Fri, 12 Jul 2019 08:49:07 -0400 Qian Cai <cai@lca.pw> wrote:

> Actually, this patch is slightly off. There is one delta need to apply (ignore
> the part in pgtable.h which has already in mainline via the commit 615c48ad8f42
> "arm64/mm: don't initialize pgd_cache twice") in.
> 
> https://lore.kernel.org/linux-mm/20190617151252.GF16810@rapoport-lnx/

That's already merged - it went in via the arm64 tree I think.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch 105/147] arm64: switch to generic version of pte allocation
  2019-07-12 21:10   ` Andrew Morton
@ 2019-07-12 21:35     ` Linus Torvalds
  2019-07-15  8:03       ` Will Deacon
  0 siblings, 1 reply; 6+ messages in thread
From: Linus Torvalds @ 2019-07-12 21:35 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Qian Cai, Linux List Kernel Mailing, anshuman.khandual,
	Anton Ivanov, aou, Arnd Bergmann, Catalin Marinas, deanbo422,
	deller, Geert Uytterhoeven, Greentime Hu, Guo Ren, Guan Xuetao,
	Ley Foon Tan, Russell King - ARM Linux, Matt Turner,
	Michal Hocko, mm-commits, Michael Ellerman, Palmer Dabbelt,
	Paul Burton, ralf, Guo Ren, Richard Weinberger, Richard Kuo,
	rppt, sammy, Matthew Wilcox

On Fri, Jul 12, 2019 at 2:11 PM Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Fri, 12 Jul 2019 08:49:07 -0400 Qian Cai <cai@lca.pw> wrote:
> >
> > https://lore.kernel.org/linux-mm/20190617151252.GF16810@rapoport-lnx/
>
> That's already merged - it went in via the arm64 tree I think.

No. Only the arch/arm64/include/asm/pgtable.h part got in through the
arm64 tree (commit 615c48ad8f42: "arm64/mm: don't initialize pgd_cache
twice").

The arch/arm64/mm/pgd.c part was missing.

I think I fixed it all up correctly.

                Linus

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch 105/147] arm64: switch to generic version of pte allocation
  2019-07-12 21:35     ` Linus Torvalds
@ 2019-07-15  8:03       ` Will Deacon
  0 siblings, 0 replies; 6+ messages in thread
From: Will Deacon @ 2019-07-15  8:03 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Andrew Morton, Qian Cai, Linux List Kernel Mailing,
	anshuman.khandual, Anton Ivanov, aou, Arnd Bergmann,
	Catalin Marinas, deanbo422, deller, Geert Uytterhoeven,
	Greentime Hu, Guo Ren, Guan Xuetao, Ley Foon Tan,
	Russell King - ARM Linux, Matt Turner, Michal Hocko, mm-commits,
	Michael Ellerman, Palmer Dabbelt, Paul Burton, ralf, Guo Ren,
	Richard Weinberger, Richard Kuo, rppt, sammy, Matthew Wilcox

On Fri, Jul 12, 2019 at 02:35:42PM -0700, Linus Torvalds wrote:
> On Fri, Jul 12, 2019 at 2:11 PM Andrew Morton <akpm@linux-foundation.org> wrote:
> >
> > On Fri, 12 Jul 2019 08:49:07 -0400 Qian Cai <cai@lca.pw> wrote:
> > >
> > > https://lore.kernel.org/linux-mm/20190617151252.GF16810@rapoport-lnx/
> >
> > That's already merged - it went in via the arm64 tree I think.
> 
> No. Only the arch/arm64/include/asm/pgtable.h part got in through the
> arm64 tree (commit 615c48ad8f42: "arm64/mm: don't initialize pgd_cache
> twice").
> 
> The arch/arm64/mm/pgd.c part was missing.

That's right; we split the patch because part of it was a fix for an
existing issue.

> I think I fixed it all up correctly.

Looks good to me, thanks.

Will

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-07-15  8:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20190712035802.eeH5anzpz%akpm@linux-foundation.org>
2019-07-12 12:49 ` [patch 105/147] arm64: switch to generic version of pte allocation Qian Cai
2019-07-12 18:20   ` Linus Torvalds
2019-07-12 19:53     ` Linus Torvalds
2019-07-12 21:10   ` Andrew Morton
2019-07-12 21:35     ` Linus Torvalds
2019-07-15  8:03       ` Will Deacon

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).