linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, Zefan Li <lizefan@huawei.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Christoph Hellwig <hch@infradead.org>,
	Christophe Leroy <christophe.leroy@csgroup.eu>,
	Rick Edgecombe <rick.p.edgecombe@intel.com>,
	Ding Tianhong <dingtianhong@huawei.com>
Subject: Re: [PATCH v10 11/12] mm/vmalloc: Hugepage vmalloc mappings
Date: Sun, 24 Jan 2021 15:07:29 +0000	[thread overview]
Message-ID: <20210124150729.GC733865@infradead.org> (raw)
In-Reply-To: <20210124082230.2118861-12-npiggin@gmail.com>

On Sun, Jan 24, 2021 at 06:22:29PM +1000, Nicholas Piggin wrote:
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 24862d15f3a3..f87feb616184 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -724,6 +724,16 @@ config HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
>  config HAVE_ARCH_HUGE_VMAP
>  	bool
>  
> +config HAVE_ARCH_HUGE_VMALLOC
> +	depends on HAVE_ARCH_HUGE_VMAP
> +	bool
> +	help
> +	  Archs that select this would be capable of PMD-sized vmaps (i.e.,
> +	  arch_vmap_pmd_supported() returns true), and they must make no
> +	  assumptions that vmalloc memory is mapped with PAGE_SIZE ptes. The
> +	  VM_NOHUGE flag can be used to prohibit arch-specific allocations from
> +	  using hugepages to help with this (e.g., modules may require it).

help texts don't make sense for options that aren't user visible.

More importantly, is there any good reason to keep the option and not
just go the extra step and enable huge page vmalloc for arm64 and x86
as well?

> +static inline bool is_vm_area_hugepages(const void *addr)
> +{
> +	/*
> +	 * This may not 100% tell if the area is mapped with > PAGE_SIZE
> +	 * page table entries, if for some reason the architecture indicates
> +	 * larger sizes are available but decides not to use them, nothing
> +	 * prevents that. This only indicates the size of the physical page
> +	 * allocated in the vmalloc layer.
> +	 */
> +	return (find_vm_area(addr)->page_order > 0);

No need for the braces here.

>  }
>  
> +static int vmap_pages_range_noflush(unsigned long addr, unsigned long end,
> +		pgprot_t prot, struct page **pages, unsigned int page_shift)
> +{
> +	unsigned int i, nr = (end - addr) >> PAGE_SHIFT;
> +
> +	WARN_ON(page_shift < PAGE_SHIFT);
> +
> +	if (page_shift == PAGE_SHIFT)
> +		return vmap_small_pages_range_noflush(addr, end, prot, pages);

This begs for a IS_ENABLED check to disable the hugepage code for
architectures that don't need it.

> +int map_kernel_range_noflush(unsigned long addr, unsigned long size,
> +			     pgprot_t prot, struct page **pages)
> +{
> +	return vmap_pages_range_noflush(addr, addr + size, prot, pages, PAGE_SHIFT);
> +}

Please just kill off map_kernel_range_noflush and map_kernel_range
off entirely in favor of the vmap versions.

> +	for (i = 0; i < area->nr_pages; i += 1U << area->page_order) {

Maybe using a helper that takes the vm_area_struct and either returns
area->page_order or always 0 based on IS_ENABLED?

  reply	other threads:[~2021-01-24 15:09 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-24  8:22 [PATCH v10 00/12] huge vmalloc mappings Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 01/12] mm/vmalloc: fix vmalloc_to_page for huge vmap mappings Nicholas Piggin
2021-01-24 11:31   ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 02/12] mm: apply_to_pte_range warn and fail if a large pte is encountered Nicholas Piggin
2021-01-24 11:32   ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 03/12] mm/vmalloc: rename vmap_*_range vmap_pages_*_range Nicholas Piggin
2021-01-24 11:34   ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 04/12] mm/ioremap: rename ioremap_*_range to vmap_*_range Nicholas Piggin
2021-01-24 11:36   ` Christoph Hellwig
2021-01-24 12:04     ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 05/12] mm: HUGE_VMAP arch support cleanup Nicholas Piggin
2021-01-24 11:40   ` Christoph Hellwig
2021-01-24 12:22     ` Nicholas Piggin
2021-01-25  8:19     ` Christophe Leroy
2021-01-25  8:40   ` Christophe Leroy
2021-01-24  8:22 ` [PATCH v10 06/12] powerpc: inline huge vmap supported functions Nicholas Piggin
2021-01-25  8:42   ` Christophe Leroy
2021-01-25 11:37     ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 07/12] arm64: " Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 08/12] x86: " Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 09/12] mm: Move vmap_range from mm/ioremap.c to mm/vmalloc.c Nicholas Piggin
2021-01-24 14:49   ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 10/12] mm/vmalloc: add vmap_range_noflush variant Nicholas Piggin
2021-01-24 14:51   ` Christoph Hellwig
2021-01-24  8:22 ` [PATCH v10 11/12] mm/vmalloc: Hugepage vmalloc mappings Nicholas Piggin
2021-01-24 15:07   ` Christoph Hellwig [this message]
2021-01-24 18:06     ` Randy Dunlap
2021-01-24 23:17     ` Nicholas Piggin
2021-01-25  9:14   ` Christophe Leroy
2021-01-25 11:37     ` Nicholas Piggin
2021-01-25 12:13       ` Christophe Leroy
2021-01-25 12:24     ` David Laight
2021-01-26  9:50       ` Nicholas Piggin
2021-01-24  8:22 ` [PATCH v10 12/12] powerpc/64s/radix: Enable huge " Nicholas Piggin

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=20210124150729.GC733865@infradead.org \
    --to=hch@infradead.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=christophe.leroy@csgroup.eu \
    --cc=dingtianhong@huawei.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lizefan@huawei.com \
    --cc=npiggin@gmail.com \
    --cc=rick.p.edgecombe@intel.com \
    /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).