All of lore.kernel.org
 help / color / mirror / Atom feed
From: SeongJae Park <sj@kernel.org>
To: Suren Baghdasaryan <surenb@google.com>
Cc: akpm@linux-foundation.org, mhocko@suse.com, vbabka@suse.cz,
	hannes@cmpxchg.org, roman.gushchin@linux.dev, mgorman@suse.de,
	dave@stgolabs.net, willy@infradead.org, liam.howlett@oracle.com,
	penguin-kernel@i-love.sakura.ne.jp, corbet@lwn.net,
	void@manifault.com, peterz@infradead.org, juri.lelli@redhat.com,
	catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de,
	tglx@linutronix.de, mingo@redhat.com,
	dave.hansen@linux.intel.com, x86@kernel.org, peterx@redhat.com,
	david@redhat.com, axboe@kernel.dk, mcgrof@kernel.org,
	masahiroy@kernel.org, nathan@kernel.org, dennis@kernel.org,
	jhubbard@nvidia.com, tj@kernel.org, muchun.song@linux.dev,
	rppt@kernel.org, paulmck@kernel.org, pasha.tatashin@soleen.com,
	yosryahmed@google.com, yuzhao@google.com, dhowells@redhat.com,
	hughd@google.com, andreyknvl@gmail.com, keescook@chromium.org,
	ndesaulniers@google.com, vvvvvv@google.com,
	gregkh@linuxfoundation.org, ebiggers@google.com,
	ytcoode@gmail.com, vincent.guittot@linaro.org,
	dietmar.eggemann@arm.com, rostedt@goodmis.org,
	bsegall@google.com, bristot@redhat.com, vschneid@redhat.com,
	cl@linux.com, penberg@kernel.org, iamjoonsoo.kim@lge.com,
	42.hyeyoo@gmail.com, glider@google.com, elver@google.com,
	dvyukov@google.com, songmuchun@bytedance.com, jbaron@akamai.com,
	aliceryhl@google.com, rientjes@google.com, minchan@google.com,
	kaleshsingh@google.com, kernel-team@android.com,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	iommu@lists.linux.dev, linux-arch@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	linux-modules@vger.kernel.org, kasan-dev@googlegroups.com,
	cgroups@vger.kernel.org
Subject: Re: [PATCH v6 30/37] mm: vmalloc: Enable memory allocation profiling
Date: Sat, 23 Mar 2024 11:05:06 -0700	[thread overview]
Message-ID: <20240323180506.195396-1-sj@kernel.org> (raw)
In-Reply-To: <20240321163705.3067592-31-surenb@google.com>

Hi Suren and Kent,

On Thu, 21 Mar 2024 09:36:52 -0700 Suren Baghdasaryan <surenb@google.com> wrote:

> From: Kent Overstreet <kent.overstreet@linux.dev>
> 
> This wrapps all external vmalloc allocation functions with the
> alloc_hooks() wrapper, and switches internal allocations to _noprof
> variants where appropriate, for the new memory allocation profiling
> feature.

I just noticed latest mm-unstable fails running kunit on my machine as below.
'git-bisect' says this is the first commit of the failure.

    $ ./tools/testing/kunit/kunit.py run --build_dir ../kunit.out/
    [10:59:53] Configuring KUnit Kernel ...
    [10:59:53] Building KUnit Kernel ...
    Populating config with:
    $ make ARCH=um O=../kunit.out/ olddefconfig
    Building with:
    $ make ARCH=um O=../kunit.out/ --jobs=36
    ERROR:root:/usr/bin/ld: arch/um/os-Linux/main.o: in function `__wrap_malloc':
    main.c:(.text+0x10b): undefined reference to `vmalloc'
    collect2: error: ld returned 1 exit status

Haven't looked into the code yet, but reporting first.  May I ask your idea?


Thanks,
SJ

> 
> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
> Signed-off-by: Suren Baghdasaryan <surenb@google.com>
> ---
>  drivers/staging/media/atomisp/pci/hmm/hmm.c |  2 +-
>  include/linux/vmalloc.h                     | 60 ++++++++++----
>  kernel/kallsyms_selftest.c                  |  2 +-
>  mm/nommu.c                                  | 64 +++++++--------
>  mm/util.c                                   | 24 +++---
>  mm/vmalloc.c                                | 88 ++++++++++-----------
>  6 files changed, 135 insertions(+), 105 deletions(-)
> 
> diff --git a/drivers/staging/media/atomisp/pci/hmm/hmm.c b/drivers/staging/media/atomisp/pci/hmm/hmm.c
> index bb12644fd033..3e2899ad8517 100644
> --- a/drivers/staging/media/atomisp/pci/hmm/hmm.c
> +++ b/drivers/staging/media/atomisp/pci/hmm/hmm.c
> @@ -205,7 +205,7 @@ static ia_css_ptr __hmm_alloc(size_t bytes, enum hmm_bo_type type,
>  	}
>  
>  	dev_dbg(atomisp_dev, "pages: 0x%08x (%zu bytes), type: %d, vmalloc %p\n",
> -		bo->start, bytes, type, vmalloc);
> +		bo->start, bytes, type, vmalloc_noprof);
>  
>  	return bo->start;
>  
> diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
> index 98ea90e90439..e4a631ec430b 100644
> --- a/include/linux/vmalloc.h
> +++ b/include/linux/vmalloc.h
> @@ -2,6 +2,8 @@
>  #ifndef _LINUX_VMALLOC_H
>  #define _LINUX_VMALLOC_H
>  
> +#include <linux/alloc_tag.h>
> +#include <linux/sched.h>
>  #include <linux/spinlock.h>
>  #include <linux/init.h>
>  #include <linux/list.h>
> @@ -138,26 +140,54 @@ extern unsigned long vmalloc_nr_pages(void);
>  static inline unsigned long vmalloc_nr_pages(void) { return 0; }
>  #endif
>  
> -extern void *vmalloc(unsigned long size) __alloc_size(1);
> -extern void *vzalloc(unsigned long size) __alloc_size(1);
> -extern void *vmalloc_user(unsigned long size) __alloc_size(1);
> -extern void *vmalloc_node(unsigned long size, int node) __alloc_size(1);
> -extern void *vzalloc_node(unsigned long size, int node) __alloc_size(1);
> -extern void *vmalloc_32(unsigned long size) __alloc_size(1);
> -extern void *vmalloc_32_user(unsigned long size) __alloc_size(1);
> -extern void *__vmalloc(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
> -extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
> +extern void *vmalloc_noprof(unsigned long size) __alloc_size(1);
> +#define vmalloc(...)		alloc_hooks(vmalloc_noprof(__VA_ARGS__))
> +
> +extern void *vzalloc_noprof(unsigned long size) __alloc_size(1);
> +#define vzalloc(...)		alloc_hooks(vzalloc_noprof(__VA_ARGS__))
> +
> +extern void *vmalloc_user_noprof(unsigned long size) __alloc_size(1);
> +#define vmalloc_user(...)	alloc_hooks(vmalloc_user_noprof(__VA_ARGS__))
> +
> +extern void *vmalloc_node_noprof(unsigned long size, int node) __alloc_size(1);
> +#define vmalloc_node(...)	alloc_hooks(vmalloc_node_noprof(__VA_ARGS__))
> +
> +extern void *vzalloc_node_noprof(unsigned long size, int node) __alloc_size(1);
> +#define vzalloc_node(...)	alloc_hooks(vzalloc_node_noprof(__VA_ARGS__))
> +
> +extern void *vmalloc_32_noprof(unsigned long size) __alloc_size(1);
> +#define vmalloc_32(...)		alloc_hooks(vmalloc_32_noprof(__VA_ARGS__))
> +
> +extern void *vmalloc_32_user_noprof(unsigned long size) __alloc_size(1);
> +#define vmalloc_32_user(...)	alloc_hooks(vmalloc_32_user_noprof(__VA_ARGS__))
> +
> +extern void *__vmalloc_noprof(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
> +#define __vmalloc(...)		alloc_hooks(__vmalloc_noprof(__VA_ARGS__))
> +
> +extern void *__vmalloc_node_range_noprof(unsigned long size, unsigned long align,
>  			unsigned long start, unsigned long end, gfp_t gfp_mask,
>  			pgprot_t prot, unsigned long vm_flags, int node,
>  			const void *caller) __alloc_size(1);
> -void *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask,
> +#define __vmalloc_node_range(...)	alloc_hooks(__vmalloc_node_range_noprof(__VA_ARGS__))
> +
> +void *__vmalloc_node_noprof(unsigned long size, unsigned long align, gfp_t gfp_mask,
>  		int node, const void *caller) __alloc_size(1);
> -void *vmalloc_huge(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
> +#define __vmalloc_node(...)	alloc_hooks(__vmalloc_node_noprof(__VA_ARGS__))
> +
> +void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
> +#define vmalloc_huge(...)	alloc_hooks(vmalloc_huge_noprof(__VA_ARGS__))
> +
> +extern void *__vmalloc_array_noprof(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2);
> +#define __vmalloc_array(...)	alloc_hooks(__vmalloc_array_noprof(__VA_ARGS__))
> +
> +extern void *vmalloc_array_noprof(size_t n, size_t size) __alloc_size(1, 2);
> +#define vmalloc_array(...)	alloc_hooks(vmalloc_array_noprof(__VA_ARGS__))
> +
> +extern void *__vcalloc_noprof(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2);
> +#define __vcalloc(...)		alloc_hooks(__vcalloc_noprof(__VA_ARGS__))
>  
> -extern void *__vmalloc_array(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2);
> -extern void *vmalloc_array(size_t n, size_t size) __alloc_size(1, 2);
> -extern void *__vcalloc(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2);
> -extern void *vcalloc(size_t n, size_t size) __alloc_size(1, 2);
> +extern void *vcalloc_noprof(size_t n, size_t size) __alloc_size(1, 2);
> +#define vcalloc(...)		alloc_hooks(vcalloc_noprof(__VA_ARGS__))
>  
>  extern void vfree(const void *addr);
>  extern void vfree_atomic(const void *addr);
> diff --git a/kernel/kallsyms_selftest.c b/kernel/kallsyms_selftest.c
> index 8a689b4ff4f9..2f84896a7bcb 100644
> --- a/kernel/kallsyms_selftest.c
> +++ b/kernel/kallsyms_selftest.c
> @@ -82,7 +82,7 @@ static struct test_item test_items[] = {
>  	ITEM_FUNC(kallsyms_test_func_static),
>  	ITEM_FUNC(kallsyms_test_func),
>  	ITEM_FUNC(kallsyms_test_func_weak),
> -	ITEM_FUNC(vmalloc),
> +	ITEM_FUNC(vmalloc_noprof),
>  	ITEM_FUNC(vfree),
>  #ifdef CONFIG_KALLSYMS_ALL
>  	ITEM_DATA(kallsyms_test_var_bss_static),
> diff --git a/mm/nommu.c b/mm/nommu.c
> index 5ec8f44e7ce9..69a6f3b4d156 100644
> --- a/mm/nommu.c
> +++ b/mm/nommu.c
> @@ -137,28 +137,28 @@ void vfree(const void *addr)
>  }
>  EXPORT_SYMBOL(vfree);
>  
> -void *__vmalloc(unsigned long size, gfp_t gfp_mask)
> +void *__vmalloc_noprof(unsigned long size, gfp_t gfp_mask)
>  {
>  	/*
>  	 *  You can't specify __GFP_HIGHMEM with kmalloc() since kmalloc()
>  	 * returns only a logical address.
>  	 */
> -	return kmalloc(size, (gfp_mask | __GFP_COMP) & ~__GFP_HIGHMEM);
> +	return kmalloc_noprof(size, (gfp_mask | __GFP_COMP) & ~__GFP_HIGHMEM);
>  }
> -EXPORT_SYMBOL(__vmalloc);
> +EXPORT_SYMBOL(__vmalloc_noprof);
>  
> -void *__vmalloc_node_range(unsigned long size, unsigned long align,
> +void *__vmalloc_node_range_noprof(unsigned long size, unsigned long align,
>  		unsigned long start, unsigned long end, gfp_t gfp_mask,
>  		pgprot_t prot, unsigned long vm_flags, int node,
>  		const void *caller)
>  {
> -	return __vmalloc(size, gfp_mask);
> +	return __vmalloc_noprof(size, gfp_mask);
>  }
>  
> -void *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask,
> +void *__vmalloc_node_noprof(unsigned long size, unsigned long align, gfp_t gfp_mask,
>  		int node, const void *caller)
>  {
> -	return __vmalloc(size, gfp_mask);
> +	return __vmalloc_noprof(size, gfp_mask);
>  }
>  
>  static void *__vmalloc_user_flags(unsigned long size, gfp_t flags)
> @@ -179,11 +179,11 @@ static void *__vmalloc_user_flags(unsigned long size, gfp_t flags)
>  	return ret;
>  }
>  
> -void *vmalloc_user(unsigned long size)
> +void *vmalloc_user_noprof(unsigned long size)
>  {
>  	return __vmalloc_user_flags(size, GFP_KERNEL | __GFP_ZERO);
>  }
> -EXPORT_SYMBOL(vmalloc_user);
> +EXPORT_SYMBOL(vmalloc_user_noprof);
>  
>  struct page *vmalloc_to_page(const void *addr)
>  {
> @@ -217,13 +217,13 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count)
>   *	For tight control over page level allocator and protection flags
>   *	use __vmalloc() instead.
>   */
> -void *vmalloc(unsigned long size)
> +void *vmalloc_noprof(unsigned long size)
>  {
> -	return __vmalloc(size, GFP_KERNEL);
> +	return __vmalloc_noprof(size, GFP_KERNEL);
>  }
> -EXPORT_SYMBOL(vmalloc);
> +EXPORT_SYMBOL(vmalloc_noprof);
>  
> -void *vmalloc_huge(unsigned long size, gfp_t gfp_mask) __weak __alias(__vmalloc);
> +void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __weak __alias(__vmalloc_noprof);
>  
>  /*
>   *	vzalloc - allocate virtually contiguous memory with zero fill
> @@ -237,14 +237,14 @@ void *vmalloc_huge(unsigned long size, gfp_t gfp_mask) __weak __alias(__vmalloc)
>   *	For tight control over page level allocator and protection flags
>   *	use __vmalloc() instead.
>   */
> -void *vzalloc(unsigned long size)
> +void *vzalloc_noprof(unsigned long size)
>  {
> -	return __vmalloc(size, GFP_KERNEL | __GFP_ZERO);
> +	return __vmalloc_noprof(size, GFP_KERNEL | __GFP_ZERO);
>  }
> -EXPORT_SYMBOL(vzalloc);
> +EXPORT_SYMBOL(vzalloc_noprof);
>  
>  /**
> - * vmalloc_node - allocate memory on a specific node
> + * vmalloc_node_noprof - allocate memory on a specific node
>   * @size:	allocation size
>   * @node:	numa node
>   *
> @@ -254,14 +254,14 @@ EXPORT_SYMBOL(vzalloc);
>   * For tight control over page level allocator and protection flags
>   * use __vmalloc() instead.
>   */
> -void *vmalloc_node(unsigned long size, int node)
> +void *vmalloc_node_noprof(unsigned long size, int node)
>  {
> -	return vmalloc(size);
> +	return vmalloc_noprof(size);
>  }
> -EXPORT_SYMBOL(vmalloc_node);
> +EXPORT_SYMBOL(vmalloc_node_noprof);
>  
>  /**
> - * vzalloc_node - allocate memory on a specific node with zero fill
> + * vzalloc_node_noprof - allocate memory on a specific node with zero fill
>   * @size:	allocation size
>   * @node:	numa node
>   *
> @@ -272,27 +272,27 @@ EXPORT_SYMBOL(vmalloc_node);
>   * For tight control over page level allocator and protection flags
>   * use __vmalloc() instead.
>   */
> -void *vzalloc_node(unsigned long size, int node)
> +void *vzalloc_node_noprof(unsigned long size, int node)
>  {
> -	return vzalloc(size);
> +	return vzalloc_noprof(size);
>  }
> -EXPORT_SYMBOL(vzalloc_node);
> +EXPORT_SYMBOL(vzalloc_node_noprof);
>  
>  /**
> - * vmalloc_32  -  allocate virtually contiguous memory (32bit addressable)
> + * vmalloc_32_noprof  -  allocate virtually contiguous memory (32bit addressable)
>   *	@size:		allocation size
>   *
>   *	Allocate enough 32bit PA addressable pages to cover @size from the
>   *	page level allocator and map them into contiguous kernel virtual space.
>   */
> -void *vmalloc_32(unsigned long size)
> +void *vmalloc_32_noprof(unsigned long size)
>  {
> -	return __vmalloc(size, GFP_KERNEL);
> +	return __vmalloc_noprof(size, GFP_KERNEL);
>  }
> -EXPORT_SYMBOL(vmalloc_32);
> +EXPORT_SYMBOL(vmalloc_32_noprof);
>  
>  /**
> - * vmalloc_32_user - allocate zeroed virtually contiguous 32bit memory
> + * vmalloc_32_user_noprof - allocate zeroed virtually contiguous 32bit memory
>   *	@size:		allocation size
>   *
>   * The resulting memory area is 32bit addressable and zeroed so it can be
> @@ -301,15 +301,15 @@ EXPORT_SYMBOL(vmalloc_32);
>   * VM_USERMAP is set on the corresponding VMA so that subsequent calls to
>   * remap_vmalloc_range() are permissible.
>   */
> -void *vmalloc_32_user(unsigned long size)
> +void *vmalloc_32_user_noprof(unsigned long size)
>  {
>  	/*
>  	 * We'll have to sort out the ZONE_DMA bits for 64-bit,
>  	 * but for now this can simply use vmalloc_user() directly.
>  	 */
> -	return vmalloc_user(size);
> +	return vmalloc_user_noprof(size);
>  }
> -EXPORT_SYMBOL(vmalloc_32_user);
> +EXPORT_SYMBOL(vmalloc_32_user_noprof);
>  
>  void *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)
>  {
> diff --git a/mm/util.c b/mm/util.c
> index a79dce7546f1..157b5edcba75 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -656,7 +656,7 @@ void *kvmalloc_node_noprof(size_t size, gfp_t flags, int node)
>  	 * about the resulting pointer, and cannot play
>  	 * protection games.
>  	 */
> -	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
> +	return __vmalloc_node_range_noprof(size, 1, VMALLOC_START, VMALLOC_END,
>  			flags, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP,
>  			node, __builtin_return_address(0));
>  }
> @@ -715,12 +715,12 @@ void *kvrealloc_noprof(const void *p, size_t oldsize, size_t newsize, gfp_t flag
>  EXPORT_SYMBOL(kvrealloc_noprof);
>  
>  /**
> - * __vmalloc_array - allocate memory for a virtually contiguous array.
> + * __vmalloc_array_noprof - allocate memory for a virtually contiguous array.
>   * @n: number of elements.
>   * @size: element size.
>   * @flags: the type of memory to allocate (see kmalloc).
>   */
> -void *__vmalloc_array(size_t n, size_t size, gfp_t flags)
> +void *__vmalloc_array_noprof(size_t n, size_t size, gfp_t flags)
>  {
>  	size_t bytes;
>  
> @@ -728,18 +728,18 @@ void *__vmalloc_array(size_t n, size_t size, gfp_t flags)
>  		return NULL;
>  	return __vmalloc(bytes, flags);
>  }
> -EXPORT_SYMBOL(__vmalloc_array);
> +EXPORT_SYMBOL(__vmalloc_array_noprof);
>  
>  /**
> - * vmalloc_array - allocate memory for a virtually contiguous array.
> + * vmalloc_array_noprof - allocate memory for a virtually contiguous array.
>   * @n: number of elements.
>   * @size: element size.
>   */
> -void *vmalloc_array(size_t n, size_t size)
> +void *vmalloc_array_noprof(size_t n, size_t size)
>  {
>  	return __vmalloc_array(n, size, GFP_KERNEL);
>  }
> -EXPORT_SYMBOL(vmalloc_array);
> +EXPORT_SYMBOL(vmalloc_array_noprof);
>  
>  /**
>   * __vcalloc - allocate and zero memory for a virtually contiguous array.
> @@ -747,22 +747,22 @@ EXPORT_SYMBOL(vmalloc_array);
>   * @size: element size.
>   * @flags: the type of memory to allocate (see kmalloc).
>   */
> -void *__vcalloc(size_t n, size_t size, gfp_t flags)
> +void *__vcalloc_noprof(size_t n, size_t size, gfp_t flags)
>  {
>  	return __vmalloc_array(n, size, flags | __GFP_ZERO);
>  }
> -EXPORT_SYMBOL(__vcalloc);
> +EXPORT_SYMBOL(__vcalloc_noprof);
>  
>  /**
> - * vcalloc - allocate and zero memory for a virtually contiguous array.
> + * vcalloc_noprof - allocate and zero memory for a virtually contiguous array.
>   * @n: number of elements.
>   * @size: element size.
>   */
> -void *vcalloc(size_t n, size_t size)
> +void *vcalloc_noprof(size_t n, size_t size)
>  {
>  	return __vmalloc_array(n, size, GFP_KERNEL | __GFP_ZERO);
>  }
> -EXPORT_SYMBOL(vcalloc);
> +EXPORT_SYMBOL(vcalloc_noprof);
>  
>  struct anon_vma *folio_anon_vma(struct folio *folio)
>  {
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 22aa63f4ef63..b2f2248d85a9 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -3507,12 +3507,12 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
>  			 * but mempolicy wants to alloc memory by interleaving.
>  			 */
>  			if (IS_ENABLED(CONFIG_NUMA) && nid == NUMA_NO_NODE)
> -				nr = alloc_pages_bulk_array_mempolicy(bulk_gfp,
> +				nr = alloc_pages_bulk_array_mempolicy_noprof(bulk_gfp,
>  							nr_pages_request,
>  							pages + nr_allocated);
>  
>  			else
> -				nr = alloc_pages_bulk_array_node(bulk_gfp, nid,
> +				nr = alloc_pages_bulk_array_node_noprof(bulk_gfp, nid,
>  							nr_pages_request,
>  							pages + nr_allocated);
>  
> @@ -3542,9 +3542,9 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
>  			break;
>  
>  		if (nid == NUMA_NO_NODE)
> -			page = alloc_pages(alloc_gfp, order);
> +			page = alloc_pages_noprof(alloc_gfp, order);
>  		else
> -			page = alloc_pages_node(nid, alloc_gfp, order);
> +			page = alloc_pages_node_noprof(nid, alloc_gfp, order);
>  		if (unlikely(!page)) {
>  			if (!nofail)
>  				break;
> @@ -3601,10 +3601,10 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
>  
>  	/* Please note that the recursion is strictly bounded. */
>  	if (array_size > PAGE_SIZE) {
> -		area->pages = __vmalloc_node(array_size, 1, nested_gfp, node,
> +		area->pages = __vmalloc_node_noprof(array_size, 1, nested_gfp, node,
>  					area->caller);
>  	} else {
> -		area->pages = kmalloc_node(array_size, nested_gfp, node);
> +		area->pages = kmalloc_node_noprof(array_size, nested_gfp, node);
>  	}
>  
>  	if (!area->pages) {
> @@ -3687,7 +3687,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
>  }
>  
>  /**
> - * __vmalloc_node_range - allocate virtually contiguous memory
> + * __vmalloc_node_range_noprof - allocate virtually contiguous memory
>   * @size:		  allocation size
>   * @align:		  desired alignment
>   * @start:		  vm area range start
> @@ -3714,7 +3714,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
>   *
>   * Return: the address of the area or %NULL on failure
>   */
> -void *__vmalloc_node_range(unsigned long size, unsigned long align,
> +void *__vmalloc_node_range_noprof(unsigned long size, unsigned long align,
>  			unsigned long start, unsigned long end, gfp_t gfp_mask,
>  			pgprot_t prot, unsigned long vm_flags, int node,
>  			const void *caller)
> @@ -3843,7 +3843,7 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
>  }
>  
>  /**
> - * __vmalloc_node - allocate virtually contiguous memory
> + * __vmalloc_node_noprof - allocate virtually contiguous memory
>   * @size:	    allocation size
>   * @align:	    desired alignment
>   * @gfp_mask:	    flags for the page level allocator
> @@ -3861,10 +3861,10 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *__vmalloc_node(unsigned long size, unsigned long align,
> +void *__vmalloc_node_noprof(unsigned long size, unsigned long align,
>  			    gfp_t gfp_mask, int node, const void *caller)
>  {
> -	return __vmalloc_node_range(size, align, VMALLOC_START, VMALLOC_END,
> +	return __vmalloc_node_range_noprof(size, align, VMALLOC_START, VMALLOC_END,
>  				gfp_mask, PAGE_KERNEL, 0, node, caller);
>  }
>  /*
> @@ -3873,15 +3873,15 @@ void *__vmalloc_node(unsigned long size, unsigned long align,
>   * than that.
>   */
>  #ifdef CONFIG_TEST_VMALLOC_MODULE
> -EXPORT_SYMBOL_GPL(__vmalloc_node);
> +EXPORT_SYMBOL_GPL(__vmalloc_node_noprof);
>  #endif
>  
> -void *__vmalloc(unsigned long size, gfp_t gfp_mask)
> +void *__vmalloc_noprof(unsigned long size, gfp_t gfp_mask)
>  {
> -	return __vmalloc_node(size, 1, gfp_mask, NUMA_NO_NODE,
> +	return __vmalloc_node_noprof(size, 1, gfp_mask, NUMA_NO_NODE,
>  				__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(__vmalloc);
> +EXPORT_SYMBOL(__vmalloc_noprof);
>  
>  /**
>   * vmalloc - allocate virtually contiguous memory
> @@ -3895,12 +3895,12 @@ EXPORT_SYMBOL(__vmalloc);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc(unsigned long size)
> +void *vmalloc_noprof(unsigned long size)
>  {
> -	return __vmalloc_node(size, 1, GFP_KERNEL, NUMA_NO_NODE,
> +	return __vmalloc_node_noprof(size, 1, GFP_KERNEL, NUMA_NO_NODE,
>  				__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vmalloc);
> +EXPORT_SYMBOL(vmalloc_noprof);
>  
>  /**
>   * vmalloc_huge - allocate virtually contiguous memory, allow huge pages
> @@ -3914,16 +3914,16 @@ EXPORT_SYMBOL(vmalloc);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc_huge(unsigned long size, gfp_t gfp_mask)
> +void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask)
>  {
> -	return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
> +	return __vmalloc_node_range_noprof(size, 1, VMALLOC_START, VMALLOC_END,
>  				    gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP,
>  				    NUMA_NO_NODE, __builtin_return_address(0));
>  }
> -EXPORT_SYMBOL_GPL(vmalloc_huge);
> +EXPORT_SYMBOL_GPL(vmalloc_huge_noprof);
>  
>  /**
> - * vzalloc - allocate virtually contiguous memory with zero fill
> + * vzalloc_noprof - allocate virtually contiguous memory with zero fill
>   * @size:    allocation size
>   *
>   * Allocate enough pages to cover @size from the page level
> @@ -3935,12 +3935,12 @@ EXPORT_SYMBOL_GPL(vmalloc_huge);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vzalloc(unsigned long size)
> +void *vzalloc_noprof(unsigned long size)
>  {
> -	return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_ZERO, NUMA_NO_NODE,
> +	return __vmalloc_node_noprof(size, 1, GFP_KERNEL | __GFP_ZERO, NUMA_NO_NODE,
>  				__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vzalloc);
> +EXPORT_SYMBOL(vzalloc_noprof);
>  
>  /**
>   * vmalloc_user - allocate zeroed virtually contiguous memory for userspace
> @@ -3951,17 +3951,17 @@ EXPORT_SYMBOL(vzalloc);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc_user(unsigned long size)
> +void *vmalloc_user_noprof(unsigned long size)
>  {
> -	return __vmalloc_node_range(size, SHMLBA,  VMALLOC_START, VMALLOC_END,
> +	return __vmalloc_node_range_noprof(size, SHMLBA,  VMALLOC_START, VMALLOC_END,
>  				    GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL,
>  				    VM_USERMAP, NUMA_NO_NODE,
>  				    __builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vmalloc_user);
> +EXPORT_SYMBOL(vmalloc_user_noprof);
>  
>  /**
> - * vmalloc_node - allocate memory on a specific node
> + * vmalloc_node_noprof - allocate memory on a specific node
>   * @size:	  allocation size
>   * @node:	  numa node
>   *
> @@ -3973,15 +3973,15 @@ EXPORT_SYMBOL(vmalloc_user);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc_node(unsigned long size, int node)
> +void *vmalloc_node_noprof(unsigned long size, int node)
>  {
> -	return __vmalloc_node(size, 1, GFP_KERNEL, node,
> +	return __vmalloc_node_noprof(size, 1, GFP_KERNEL, node,
>  			__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vmalloc_node);
> +EXPORT_SYMBOL(vmalloc_node_noprof);
>  
>  /**
> - * vzalloc_node - allocate memory on a specific node with zero fill
> + * vzalloc_node_noprof - allocate memory on a specific node with zero fill
>   * @size:	allocation size
>   * @node:	numa node
>   *
> @@ -3991,12 +3991,12 @@ EXPORT_SYMBOL(vmalloc_node);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vzalloc_node(unsigned long size, int node)
> +void *vzalloc_node_noprof(unsigned long size, int node)
>  {
> -	return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_ZERO, node,
> +	return __vmalloc_node_noprof(size, 1, GFP_KERNEL | __GFP_ZERO, node,
>  				__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vzalloc_node);
> +EXPORT_SYMBOL(vzalloc_node_noprof);
>  
>  #if defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA32)
>  #define GFP_VMALLOC32 (GFP_DMA32 | GFP_KERNEL)
> @@ -4011,7 +4011,7 @@ EXPORT_SYMBOL(vzalloc_node);
>  #endif
>  
>  /**
> - * vmalloc_32 - allocate virtually contiguous memory (32bit addressable)
> + * vmalloc_32_noprof - allocate virtually contiguous memory (32bit addressable)
>   * @size:	allocation size
>   *
>   * Allocate enough 32bit PA addressable pages to cover @size from the
> @@ -4019,15 +4019,15 @@ EXPORT_SYMBOL(vzalloc_node);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc_32(unsigned long size)
> +void *vmalloc_32_noprof(unsigned long size)
>  {
> -	return __vmalloc_node(size, 1, GFP_VMALLOC32, NUMA_NO_NODE,
> +	return __vmalloc_node_noprof(size, 1, GFP_VMALLOC32, NUMA_NO_NODE,
>  			__builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vmalloc_32);
> +EXPORT_SYMBOL(vmalloc_32_noprof);
>  
>  /**
> - * vmalloc_32_user - allocate zeroed virtually contiguous 32bit memory
> + * vmalloc_32_user_noprof - allocate zeroed virtually contiguous 32bit memory
>   * @size:	     allocation size
>   *
>   * The resulting memory area is 32bit addressable and zeroed so it can be
> @@ -4035,14 +4035,14 @@ EXPORT_SYMBOL(vmalloc_32);
>   *
>   * Return: pointer to the allocated memory or %NULL on error
>   */
> -void *vmalloc_32_user(unsigned long size)
> +void *vmalloc_32_user_noprof(unsigned long size)
>  {
> -	return __vmalloc_node_range(size, SHMLBA,  VMALLOC_START, VMALLOC_END,
> +	return __vmalloc_node_range_noprof(size, SHMLBA,  VMALLOC_START, VMALLOC_END,
>  				    GFP_VMALLOC32 | __GFP_ZERO, PAGE_KERNEL,
>  				    VM_USERMAP, NUMA_NO_NODE,
>  				    __builtin_return_address(0));
>  }
> -EXPORT_SYMBOL(vmalloc_32_user);
> +EXPORT_SYMBOL(vmalloc_32_user_noprof);
>  
>  /*
>   * Atomically zero bytes in the iterator.
> -- 
> 2.44.0.291.gc1ea87d7ee-goog

  reply	other threads:[~2024-03-23 18:05 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-21 16:36 [PATCH v6 00/37] Memory allocation profiling Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 01/37] fix missing vmalloc.h includes Suren Baghdasaryan
2024-04-03 21:12   ` Nathan Chancellor
2024-04-03 21:41     ` Kent Overstreet
2024-04-03 21:48       ` David Hildenbrand
2024-04-03 22:57         ` Kent Overstreet
2024-04-04  2:55           ` Randy Dunlap
2024-03-21 16:36 ` [PATCH v6 02/37] asm-generic/io.h: Kill vmalloc.h dependency Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 03/37] mm/slub: Mark slab_free_freelist_hook() __always_inline Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 04/37] scripts/kallysms: Always include __start and __stop symbols Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 05/37] fs: Convert alloc_inode_sb() to a macro Suren Baghdasaryan
2024-03-21 20:31   ` Andrew Morton
2024-03-21 21:13     ` Suren Baghdasaryan
2024-03-21 21:15     ` Kent Overstreet
2024-03-21 22:09       ` Andrew Morton
2024-03-21 22:17         ` Kent Overstreet
2024-03-21 22:47           ` Suren Baghdasaryan
2024-04-04 16:57             ` Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 06/37] mm: introduce slabobj_ext to support slab object extensions Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 07/37] mm: introduce __GFP_NO_OBJ_EXT flag to selectively prevent slabobj_ext creation Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 08/37] mm/slab: introduce SLAB_NO_OBJ_EXT to avoid obj_ext creation Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 09/37] slab: objext: introduce objext_flags as extension to page_memcg_data_flags Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 10/37] lib: code tagging framework Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 11/37] lib: code tagging module support Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 12/37] lib: prevent module unloading if memory is not freed Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 13/37] lib: add allocation tagging support for memory allocation profiling Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 14/37] lib: introduce support for page allocation tagging Suren Baghdasaryan
2024-03-26  3:12   ` Matthew Wilcox
2024-03-26  6:23     ` Suren Baghdasaryan
2024-03-27  3:24       ` Matthew Wilcox
2024-03-27  5:30         ` Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 15/37] lib: introduce early boot parameter to avoid page_ext memory overhead Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 16/37] mm: percpu: increase PERCPU_MODULE_RESERVE to accommodate allocation tags Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 17/37] change alloc_pages name in dma_map_ops to avoid name conflicts Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 18/37] mm: enable page allocation tagging Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 19/37] mm: create new codetag references during page splitting Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 20/37] mm: fix non-compound multi-order memory accounting in __free_pages Suren Baghdasaryan
2024-03-21 16:48   ` Matthew Wilcox
2024-03-21 17:04     ` Matthew Wilcox
2024-03-21 17:19       ` Suren Baghdasaryan
2024-03-21 17:22         ` Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 21/37] mm/page_ext: enable early_page_ext when CONFIG_MEM_ALLOC_PROFILING_DEBUG=y Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 22/37] lib: add codetag reference into slabobj_ext Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 23/37] mm/slab: add allocation accounting into slab allocation and free paths Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 24/37] rust: Add a rust helper for krealloc() Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 25/37] mm/slab: enable slab allocation tagging for kmalloc and friends Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 26/37] mempool: Hook up to memory allocation profiling Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 27/37] mm: percpu: Introduce pcpuobj_ext Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 28/37] mm: percpu: Add codetag reference into pcpuobj_ext Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 29/37] mm: percpu: enable per-cpu allocation tagging Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 30/37] mm: vmalloc: Enable memory allocation profiling Suren Baghdasaryan
2024-03-23 18:05   ` SeongJae Park [this message]
2024-03-25 14:56     ` Suren Baghdasaryan
2024-03-25 17:49       ` SeongJae Park
2024-03-25 17:59         ` Suren Baghdasaryan
2024-03-25 18:20           ` SeongJae Park
2024-03-26  7:51             ` Suren Baghdasaryan
2024-03-26 15:39               ` SeongJae Park
2024-04-16 19:27   ` Sourav Panda
2024-03-21 16:36 ` [PATCH v6 31/37] rhashtable: Plumb through alloc tag Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 32/37] lib: add memory allocations report in show_mem() Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 33/37] codetag: debug: skip objext checking when it's for objext itself Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 34/37] codetag: debug: mark codetags for reserved pages as empty Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 35/37] codetag: debug: introduce OBJEXTS_ALLOC_FAIL to mark failed slab_ext allocations Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 36/37] MAINTAINERS: Add entries for code tagging and memory allocation profiling Suren Baghdasaryan
2024-03-21 16:36 ` [PATCH v6 37/37] memprofiling: Documentation Suren Baghdasaryan
2024-03-21 20:41 ` [PATCH v6 00/37] Memory allocation profiling Andrew Morton
2024-03-21 21:08   ` Suren Baghdasaryan
2024-04-05 13:37 ` Klara Modin
2024-04-05 14:14   ` Suren Baghdasaryan
2024-04-05 14:30     ` Klara Modin
2024-04-05 15:20       ` Suren Baghdasaryan
2024-04-05 15:37         ` Klara Modin
2024-04-06 21:42           ` Suren Baghdasaryan
2024-04-25  1:59 ` Kees Cook
2024-04-25  3:25   ` Kent Overstreet
2024-04-25 15:39     ` Suren Baghdasaryan
2024-04-25 20:00       ` Kees Cook
2024-04-25 21:35         ` Suren Baghdasaryan
2024-04-25 20:08 ` Kees Cook

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=20240323180506.195396-1-sj@kernel.org \
    --to=sj@kernel.org \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=aliceryhl@google.com \
    --cc=andreyknvl@gmail.com \
    --cc=arnd@arndb.de \
    --cc=axboe@kernel.dk \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@linux.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave@stgolabs.net \
    --cc=david@redhat.com \
    --cc=dennis@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=dvyukov@google.com \
    --cc=ebiggers@google.com \
    --cc=elver@google.com \
    --cc=glider@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=iommu@lists.linux.dev \
    --cc=jbaron@akamai.com \
    --cc=jhubbard@nvidia.com \
    --cc=juri.lelli@redhat.com \
    --cc=kaleshsingh@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=keescook@chromium.org \
    --cc=kernel-team@android.com \
    --cc=liam.howlett@oracle.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.com \
    --cc=minchan@google.com \
    --cc=mingo@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=paulmck@kernel.org \
    --cc=penberg@kernel.org \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=peterx@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=songmuchun@bytedance.com \
    --cc=surenb@google.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=vbabka@suse.cz \
    --cc=vincent.guittot@linaro.org \
    --cc=void@manifault.com \
    --cc=vschneid@redhat.com \
    --cc=vvvvvv@google.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=x86@kernel.org \
    --cc=yosryahmed@google.com \
    --cc=ytcoode@gmail.com \
    --cc=yuzhao@google.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 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.