The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* Re: [PATCH v12 0/5] mm/vmalloc: free unused pages on vrealloc() shrink
       [not found] <20260428-vmalloc-shrink-v12-0-3c18c9172eb1@zohomail.in>
@ 2026-05-05 15:42 ` Shivam Kalra
  2026-05-09  0:27   ` Andrew Morton
       [not found] ` <20260428-vmalloc-shrink-v12-4-3c18c9172eb1@zohomail.in>
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Shivam Kalra @ 2026-05-05 15:42 UTC (permalink / raw)
  To: Andrew Morton, Uladzislau Rezki
  Cc: linux-mm, linux-kernel, Alice Ryhl, Danilo Krummrich

On 28/04/26 01:54, Shivam Kalra via B4 Relay wrote:
> This series implements the TODO in vrealloc() to unmap and free unused
> pages when shrinking across a page boundary.
> 
> Problem:
> When vrealloc() shrinks an allocation, it updates bookkeeping
> (requested_size, KASAN shadow) but does not free the underlying physical
> pages. This wastes memory for the lifetime of the allocation.
> 
> Solution:
> - Patch 1: Extracts a vm_area_free_pages(vm, start_idx, end_idx) helper
>    from vfree() that frees a range of pages with memcg and nr_vmalloc_pages
>    accounting. Freed page pointers are set to NULL to prevent stale
>    references.
> - Patch 2: Update the grow-in-place check in vrealloc() to compare the
>    requested size against the actual physical page count (vm->nr_pages)
>    rather than the virtual area sizes. This is a prerequisite for shrinking.
> - Patch 3: Update vread_iter() to derive the vm area size from
>    vm->nr_pages rather than get_vm_area_size(), which would overestimate
>    the mapped range after a shrink.
> - Patch 4: Uses the helper to free tail pages when vrealloc() shrinks
>    across a page boundary.
> - Patch 5: Adds a vrealloc test case to lib/test_vmalloc that exercises
>    grow-realloc, shrink-across-boundary, shrink-within-page, and
>    grow-in-place paths.
> 
> The virtual address reservation is kept intact to preserve the range
> for potential future grow-in-place support.
> A concrete user is the Rust binder driver's KVVec::shrink_to [1], which
> performs explicit vrealloc() shrinks for memory reclamation.
> 
> Tested:
> - KASAN KUnit (vmalloc_oob passes)
> - lib/test_vmalloc stress tests (3/3, 1M iterations each)
> - checkpatch, sparse, W=1, allmodconfig, coccicheck clean
> 
> [1] https://lore.kernel.org/all/20260216-binder-shrink-vec-v3-v6-0-ece8e8593e53@zohomail.in/
> 
> Suggested-by: Danilo Krummrich <dakr@kernel.org>
> Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
> ---
> Changes in v12:
> - Rewrite vm_area_free_pages() to use free_pages_bulk()
>    following the upstream vfree() refactoring.(Andrew)
> - Drop Reviewed-by tags from Patch 1 due to the rewrite
> - Rebase to latest mm-new
> - Link to v11: https://lore.kernel.org/r/20260420-vmalloc-shrink-v11-0-cad80b00853a@zohomail.in
> 
> Changes in v11:
> - Prepare vread_iter() to use vm->nr_pages instead of
>    get_vm_area_size() (Uladzislau Rezki, Sashiko)
> - Drop (size_t) cast from nr_pages << PAGE_SHIFT (Uladzislau Rezki)
> - Link to v10: https://lore.kernel.org/r/20260404-vmalloc-shrink-v10-0-335759165dfa@zohomail.in
> 
> Changes in v10:
> - Reorder vm->nr_pages to the beginning (Alice Ryhl)
> - Link to v9: https://lore.kernel.org/r/20260401-vmalloc-shrink-v9-0-bf58dfb997d8@zohomail.in
> 
> Changes in v9:
> - Remove READ_ONCE, WRITE_ONCE and drop commit
>    about show_numa_info. (Uladzislau Rezki)
> - Update the commit message in Patch 2. (Alice Ryhl)
> - Remove zero newly exposed memory commit.
> - Link to v8: https://lore.kernel.org/r/20260327-vmalloc-shrink-v8-0-cc6b57059ed7@zohomail.in
> 
> Changes in v8:
> - Strip the KASAN tag from the pointer before addr_to_node()
>    to avoid acquiring the wrong node lock (Sashiko).
> - Rebase to latest mm-new.
> - Link to v7: https://lore.kernel.org/r/20260324-vmalloc-shrink-v7-0-c0e62b8e5d83@zohomail.in
> 
> Changes in v7:
> - Fix NULL pointer dereference in shrink path (Sashiko)
> - Acquire vn->busy.lock when updating vm->nr_pages to synchronize
>    with concurrent readers (Uladzislau Rezki)
> - Use READ_ONCE in vmalloc_dump_obj (Sashiko)
> - Skip shrink path on GFP_NIO or GFP_NOFS. (Sashiko)
> - Fix Overflow issue for large allocations. (Sashiko)
> - Use vrealloc instead of vmalloc in vrealloc test.
> - Link to v6: https://lore.kernel.org/r/20260321-vmalloc-shrink-v6-0-062ca7b7ceb2@zohomail.in
> 
> Changes in v6:
> - Fix VM_USERMAP crash by explicitly bypassing early in the shrink path if the flag is set.(Sashiko)
> - Fix Kmemleak scanner panic by calling kmemleak_free_part() to update tracking on shrink.(Sashiko)
> - Fix /proc/vmallocinfo race condition by protecting vm->nr_pages access with
>    READ_ONCE()/WRITE_ONCE() for concurrent readers.(Sashiko)
> - Fix stale data leak on grow-after-shrink by enforcing mandatory zeroing of the newly exposed memory.(Sashiko)
> - Fix memory leaks in vrealloc_test() by using a temporary pointer to preserve and
>    free the original allocation upon failure.(Sashiko)
> - Rename vmalloc_free_pages parameters from start/end to start_idx/end_idx for better clarity.(Uladzislau Rezki)
> - Link to v5: https://lore.kernel.org/r/20260317-vmalloc-shrink-v5-0-bbfbf54c5265@zohomail.in
> - Link to Sashiko: https://sashiko.dev/#/patchset/20260317-vmalloc-shrink-v5-0-bbfbf54c5265%40zohomail.in
> 
> Changes in v5:
> - Skip vrealloc shrink for VM_FLUSH_RESET_PERMS (Uladzislau Rezki)
> - Link to v4: https://lore.kernel.org/r/20260314-vmalloc-shrink-v4-0-c1e2e0bb5455@zohomail.in
> 
> Changes in v4:
> - Rename vmalloc_free_pages() to vm_area_free_pages() to align with
>    vm_area_alloc_pages() (Uladzislau Rezki)
> - NULL out freed vm->pages[] entries to prevent stale pointers (Alice Ryhl)
> - Remove redundant if (vm->nr_pages) guard in vfree() (Uladzislau Rezki)
> - Add vrealloc test case to lib/test_vmalloc (new patch 3/3)
> - Link to v3: https://lore.kernel.org/r/20260309-vmalloc-shrink-v3-0-5590fd8de2eb@zohomail.in
> 
> Changes in v3:
> - Restore the comment.
> - Rebase to the latest mm-new
> - Link to v2: https://lore.kernel.org/r/20260304-vmalloc-shrink-v2-0-28c291d60100@zohomail.in
> 
> Changes in v2:
> - Updated the base-commit to mm-new
> - Fix conflicts after rebase
> - Ran `clang-format` on the changes made
> - Use a single `kasan_vrealloc` (Alice Ryhl)
> - Link to v1: https://lore.kernel.org/r/20260302-vmalloc-shrink-v1-0-46deff465b7e@zohomail.in
> 
> ---
> Shivam Kalra (5):
>        mm/vmalloc: extract vm_area_free_pages() helper from vfree()
>        mm/vmalloc: use physical page count for vrealloc() grow-in-place check
>        mm/vmalloc: use physical page count in vread_iter()
>        mm/vmalloc: free unused pages on vrealloc() shrink
>        lib/test_vmalloc: add vrealloc test case
> 
>   lib/test_vmalloc.c |  62 +++++++++++++++++++++++++++++++
>   mm/vmalloc.c       | 107 ++++++++++++++++++++++++++++++++++++++++++++++-------
>   2 files changed, 156 insertions(+), 13 deletions(-)
> ---
> base-commit: 4f7b2cc1ad8719d55a8de9675a0aca65cb17c364
> change-id: 20260302-vmalloc-shrink-04b2fa688a14
> 
> Best regards,
Gentle thread bump. Let me know if you have any feedback.

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

* Re: [PATCH v12 4/5] mm/vmalloc: free unused pages on vrealloc() shrink
       [not found] ` <20260428-vmalloc-shrink-v12-4-3c18c9172eb1@zohomail.in>
@ 2026-05-06 18:27   ` Uladzislau Rezki
  0 siblings, 0 replies; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-06 18:27 UTC (permalink / raw)
  To: shivamkalra98
  Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Tue, Apr 28, 2026 at 01:54:19AM +0530, Shivam Kalra via B4 Relay wrote:
> From: Shivam Kalra <shivamkalra98@zohomail.in>
> 
> When vrealloc() shrinks an allocation and the new size crosses a page
> boundary, unmap and free the tail pages that are no longer needed. This
> reclaims physical memory that was previously wasted for the lifetime
> of the allocation.
> 
> The heuristic is simple: always free when at least one full page becomes
> unused. Huge page allocations (page_order > 0) are skipped, as partial
> freeing would require splitting. Allocations with VM_FLUSH_RESET_PERMS
> are also skipped, as their direct-map permissions must be reset before
> pages are returned to the page allocator, which is handled by
> vm_reset_perms() during vfree().
> 
> Additionally, allocations with VM_USERMAP are skipped because
> remap_vmalloc_range_partial() validates mapping requests against the
> unchanged vm->size; freeing tail pages would cause vmalloc_to_page()
> to return NULL for the unmapped range.
> 
> To protect concurrent readers, the shrink path uses Node lock to
> synchronize before freeing the pages.
> 
> Finally, we notify kmemleak of the reduced allocation size using
> kmemleak_free_part() to prevent the kmemleak scanner from faulting on
> the newly unmapped virtual addresses.
> 
> The virtual address reservation (vm->size / vmap_area) is intentionally
> kept unchanged, preserving the address for potential future grow-in-place
> support.
> 
> Suggested-by: Danilo Krummrich <dakr@kernel.org>
> Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
> ---
>  mm/vmalloc.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 52 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 65e0a23efb3b..9f810d306db9 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -4346,14 +4346,62 @@ void *vrealloc_node_align_noprof(const void *p, size_t size, unsigned long align
>  		goto need_realloc;
>  	}
>  
> -	/*
> -	 * TODO: Shrink the vm_area, i.e. unmap and free unused pages. What
> -	 * would be a good heuristic for when to shrink the vm_area?
> -	 */
>  	if (size <= old_size) {
> +		unsigned int new_nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
> +
>  		/* Zero out "freed" memory, potentially for future realloc. */
>  		if (want_init_on_free() || want_init_on_alloc(flags))
>  			memset((void *)p + size, 0, old_size - size);
> +
> +		/*
> +		 * Free tail pages when shrink crosses a page boundary.
> +		 *
> +		 * Skip huge page allocations (page_order > 0) as partial
> +		 * freeing would require splitting.
> +		 *
> +		 * Skip VM_FLUSH_RESET_PERMS, as direct-map permissions must
> +		 * be reset before pages are returned to the allocator.
> +		 *
> +		 * Skip VM_USERMAP, as remap_vmalloc_range_partial() validates
> +		 * mapping requests against the unchanged vm->size; freeing
> +		 * tail pages would cause vmalloc_to_page() to return NULL for
> +		 * the unmapped range.
> +		 *
> +		 * Skip if either GFP_NOFS or GFP_NOIO are used.
> +		 * kmemleak_free_part() internally allocates with
> +		 * GFP_KERNEL, which could trigger a recursive deadlock
> +		 * if we are under filesystem or I/O reclaim.
> +		 */
> +		if (new_nr_pages < vm->nr_pages && !vm_area_page_order(vm) &&
> +		    !(vm->flags & (VM_FLUSH_RESET_PERMS | VM_USERMAP)) &&
> +		    gfp_has_io_fs(flags)) {
> +			unsigned long addr = (unsigned long)kasan_reset_tag(p);
> +			unsigned int old_nr_pages = vm->nr_pages;
> +
> +			/*
> +			 * Use the node lock to synchronize with concurrent
> +			 * readers (vmalloc_info_show).
> +			 */
> +			struct vmap_node *vn = addr_to_node(addr);
> +
> +			spin_lock(&vn->busy.lock);
> +			vm->nr_pages = new_nr_pages;
> +			spin_unlock(&vn->busy.lock);
> +
> +			/* Notify kmemleak of the reduced allocation size before unmapping. */
> +			kmemleak_free_part(
> +				(void *)addr + ((unsigned long)new_nr_pages
> +						<< PAGE_SHIFT),
> +				(unsigned long)(old_nr_pages - new_nr_pages)
> +					<< PAGE_SHIFT);
> +
> +			vunmap_range(addr + ((unsigned long)new_nr_pages
> +					     << PAGE_SHIFT),
> +				     addr + ((unsigned long)old_nr_pages
> +					     << PAGE_SHIFT));
> +
> +			vm_area_free_pages(vm, new_nr_pages, old_nr_pages);
> +		}
>  		vm->requested_size = size;
>  		kasan_vrealloc(p, old_size, size);
>  		return (void *)p;
> 
> -- 
> 2.43.0
> 
> 
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

--
Uladzislau Rezki

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

* Re: [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()
       [not found] ` <20260428-vmalloc-shrink-v12-3-3c18c9172eb1@zohomail.in>
@ 2026-05-06 18:28   ` Uladzislau Rezki
  0 siblings, 0 replies; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-06 18:28 UTC (permalink / raw)
  To: shivamkalra98
  Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Tue, Apr 28, 2026 at 01:54:18AM +0530, Shivam Kalra via B4 Relay wrote:
> From: Shivam Kalra <shivamkalra98@zohomail.in>
> 
> Update vread_iter() to derive the vm area size from vm->nr_pages rather
> than get_vm_area_size().
> 
> Currently both values are equivalent, but the upcoming vrealloc() shrink
> functionality will free pages without reducing the virtual reservation
> size. After such a shrink, the old get_vm_area_size() based calculation
> would overestimate the mapped range, causing vread_iter() to attempt
> reading from unmapped addresses. Switch to vm->nr_pages now so the
> reader remains correct once shrink support is added.
> 
> Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
> ---
>  mm/vmalloc.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 9cb3e287a1e8..65e0a23efb3b 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -4661,7 +4661,14 @@ long vread_iter(struct iov_iter *iter, const char *addr, size_t count)
>  		smp_rmb();
>  
>  		vaddr = (char *) va->va_start;
> -		size = vm ? get_vm_area_size(vm) : va_size(va);
> +		if (vm)
> +			/*
> +			 * Cannot use get_vm_area_size() because realloc()
> +			 * may shrink the mapping and area->size may be outdated.
> +			 */
> +			size = vm->nr_pages << PAGE_SHIFT;
> +		else
> +			size = va_size(va);
>  
>  		if (addr >= vaddr + size)
>  			goto next_va;
> 
> -- 
> 2.43.0
> 
> 
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

--
Uladzislau Rezki

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

* Re: [PATCH v12 1/5] mm/vmalloc: extract vm_area_free_pages() helper from vfree()
       [not found] ` <20260428-vmalloc-shrink-v12-1-3c18c9172eb1@zohomail.in>
@ 2026-05-06 18:32   ` Uladzislau Rezki
  0 siblings, 0 replies; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-06 18:32 UTC (permalink / raw)
  To: shivamkalra98
  Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Tue, Apr 28, 2026 at 01:54:16AM +0530, Shivam Kalra via B4 Relay wrote:
> From: Shivam Kalra <shivamkalra98@zohomail.in>
> 
> Extract page freeing and NR_VMALLOC stat accounting from
> vfree() into a reusable vm_area_free_pages() helper.
> The helper operates on a range [start_idx, end_idx) of pages
> from a vm_struct, making it suitable for both full free (vfree)
> and partial free (upcoming vrealloc shrink).
> 
> Freed page pointers in vm->pages[] are set to NULL
> to prevent stale references when the vm_struct outlives the
> free (as in vrealloc shrink).
> 
> Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
> ---
>  mm/vmalloc.c | 34 +++++++++++++++++++++++++++-------
>  1 file changed, 27 insertions(+), 7 deletions(-)
> 
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 878c5b7bf837..1073abb6094e 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -3416,6 +3416,32 @@ void vfree_atomic(const void *addr)
>  		schedule_work(&p->wq);
>  }
>  
> +/*
> + * vm_area_free_pages - free a range of pages from a vmalloc allocation
> + * @vm: the vm_struct containing the pages
> + * @start_idx: first page index to free (inclusive)
> + * @end_idx: last page index to free (exclusive)
> + *
> + * Free pages [start_idx, end_idx) updating NR_VMALLOC stat accounting.
> + * Freed vm->pages[] entries are set to NULL.
> + * Caller is responsible for unmapping (vunmap_range) and KASAN
> + * poisoning before calling this.
> + */
> +static void vm_area_free_pages(struct vm_struct *vm, unsigned int start_idx,
> +			       unsigned int end_idx)
> +{
> +	unsigned int i;
> +
> +	if (!(vm->flags & VM_MAP_PUT_PAGES)) {
> +		for (i = start_idx; i < end_idx; i++)
> +			mod_lruvec_page_state(vm->pages[i], NR_VMALLOC, -1);
> +	}
> +	free_pages_bulk(vm->pages + start_idx, end_idx - start_idx);
> +
> +	for (i = start_idx; i < end_idx; i++)
> +		vm->pages[i] = NULL;
> +}
> +
>  /**
>   * vfree - Release memory allocated by vmalloc()
>   * @addr:  Memory base address
> @@ -3436,7 +3462,6 @@ void vfree_atomic(const void *addr)
>  void vfree(const void *addr)
>  {
>  	struct vm_struct *vm;
> -	int i;
>  
>  	if (unlikely(in_interrupt())) {
>  		vfree_atomic(addr);
> @@ -3460,12 +3485,7 @@ void vfree(const void *addr)
>  	if (unlikely(vm->flags & VM_FLUSH_RESET_PERMS))
>  		vm_reset_perms(vm);
>  
> -	if (!(vm->flags & VM_MAP_PUT_PAGES)) {
> -		for (i = 0; i < vm->nr_pages; i++)
> -			mod_lruvec_page_state(vm->pages[i], NR_VMALLOC, -1);
> -	}
> -	free_pages_bulk(vm->pages, vm->nr_pages);
> -
> +	vm_area_free_pages(vm, 0, vm->nr_pages);
>  	kvfree(vm->pages);
>  	kfree(vm);
>  }
> 
> -- 
> 2.43.0
> 
> 
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

--
Uladzislau Rezki

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

* Re: [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check
       [not found] ` <20260428-vmalloc-shrink-v12-2-3c18c9172eb1@zohomail.in>
@ 2026-05-06 18:47   ` Uladzislau Rezki
  2026-05-06 19:43     ` Shivam Kalra
  0 siblings, 1 reply; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-06 18:47 UTC (permalink / raw)
  To: shivamkalra98
  Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Tue, Apr 28, 2026 at 01:54:17AM +0530, Shivam Kalra via B4 Relay wrote:
> From: Shivam Kalra <shivamkalra98@zohomail.in>
> 
> Update the grow-in-place check in vrealloc() to compare the requested size
> against the actual physical page count (vm->nr_pages) rather than the
> virtual area size (alloced_size, derived from get_vm_area_size()).
> 
> Currently both values are equivalent, but the upcoming vrealloc() shrink
> functionality will free pages without reducing the virtual reservation
> size. After such a shrink, the old alloced_size-based comparison would
> incorrectly allow a grow-in-place operation to succeed and attempt to
> access freed pages. Switch to vm->nr_pages now so the check remains
> correct once shrink support is added.
> 
> Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
> ---
>  mm/vmalloc.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 1073abb6094e..9cb3e287a1e8 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -4338,6 +4338,12 @@ void *vrealloc_node_align_noprof(const void *p, size_t size, unsigned long align
>  		if (unlikely(flags & __GFP_THISNODE) && nid != NUMA_NO_NODE &&
>  			     nid != page_to_nid(vmalloc_to_page(p)))
>  			goto need_realloc;
> +	} else {
> +		/*
> +		 * If p is NULL, vrealloc behaves exactly like vmalloc.
> +		 * Skip the shrink and in-place grow paths.
> +		 */
> +		goto need_realloc;
>  	}
>  
>  	/*
> @@ -4356,7 +4362,7 @@ void *vrealloc_node_align_noprof(const void *p, size_t size, unsigned long align
>  	/*
>  	 * We already have the bytes available in the allocation; use them.
>  	 */
> -	if (size <= alloced_size) {
> +	if (size <= vm->nr_pages << PAGE_SHIFT) {
>  		/*
>
Maybe we should consider Fujunjie approach and borrow his idea to shrink VA also?
In that case, we do not need to switch to vm->nr_pages? And we do not
need 

[PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()

?

--
Uladzislau Rezki

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

* Re: [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check
  2026-05-06 18:47   ` [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check Uladzislau Rezki
@ 2026-05-06 19:43     ` Shivam Kalra
  2026-05-07 17:21       ` Uladzislau Rezki
  0 siblings, 1 reply; 10+ messages in thread
From: Shivam Kalra @ 2026-05-06 19:43 UTC (permalink / raw)
  To: Uladzislau Rezki
  Cc: Andrew Morton, linux-mm, linux-kernel, Alice Ryhl,
	Danilo Krummrich

On 07/05/26 00:17, Uladzislau Rezki wrote:
> Maybe we should consider Fujunjie approach and borrow his idea to shrink VA also?
> In that case, we do not need to switch to vm->nr_pages? And we do not
> need
> 
> [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()
> 
> ?
> 
> --
> Uladzislau Rezki
I didn't want to change the va in this patch series and wanted to keep
it simple.
If we change the va, we will also need to rebalance the rb tree.
I can work on a followup patch series if VA space pressure is critical.

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

* Re: [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check
  2026-05-06 19:43     ` Shivam Kalra
@ 2026-05-07 17:21       ` Uladzislau Rezki
  2026-05-07 19:06         ` Shivam Kalra
  0 siblings, 1 reply; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-07 17:21 UTC (permalink / raw)
  To: Shivam Kalra
  Cc: Uladzislau Rezki, Andrew Morton, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Thu, May 07, 2026 at 01:13:35AM +0530, Shivam Kalra wrote:
> On 07/05/26 00:17, Uladzislau Rezki wrote:
> > Maybe we should consider Fujunjie approach and borrow his idea to shrink VA also?
> > In that case, we do not need to switch to vm->nr_pages? And we do not
> > need
> > 
> > [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()
> > 
> > ?
> > 
> > --
> > Uladzislau Rezki
> I didn't want to change the va in this patch series and wanted to keep
> it simple.
> If we change the va, we will also need to rebalance the rb tree.
> I can work on a followup patch series if VA space pressure is critical.
>
Actually it is not critical. The idea is if we shrink VA then we do not
need care much about the size thus keeping vread_iter() unchanged as
well as [PATCH v12 2/5]? at least partly.

I am find with it anyway.

Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

--
Uladzislau Rezki

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

* Re: [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check
  2026-05-07 17:21       ` Uladzislau Rezki
@ 2026-05-07 19:06         ` Shivam Kalra
  2026-05-08 15:27           ` Uladzislau Rezki
  0 siblings, 1 reply; 10+ messages in thread
From: Shivam Kalra @ 2026-05-07 19:06 UTC (permalink / raw)
  To: Uladzislau Rezki
  Cc: Andrew Morton, linux-mm, linux-kernel, Alice Ryhl,
	Danilo Krummrich

On 07/05/26 22:51, Uladzislau Rezki wrote:
> On Thu, May 07, 2026 at 01:13:35AM +0530, Shivam Kalra wrote:
>> On 07/05/26 00:17, Uladzislau Rezki wrote:
>>> Maybe we should consider Fujunjie approach and borrow his idea to shrink VA also?
>>> In that case, we do not need to switch to vm->nr_pages? And we do not
>>> need
>>>
>>> [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()
>>>
>>> ?
>>>
>>> --
>>> Uladzislau Rezki
>> I didn't want to change the va in this patch series and wanted to keep
>> it simple.
>> If we change the va, we will also need to rebalance the rb tree.
>> I can work on a followup patch series if VA space pressure is critical.
>>
> Actually it is not critical. The idea is if we shrink VA then we do not
> need care much about the size thus keeping vread_iter() unchanged as
> well as [PATCH v12 2/5]? at least partly.
> 
> I am find with it anyway.
> 
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> 
> --
> Uladzislau Rezki

Thanks for the review.

There's actually one more benefit of this approach for a future
grow-in-place optimization: since the VA reservation is kept intact
after a shrink, a subsequent grow wouldn't need to allocate a new
virtual address range or manipulate the vmap_area tree. It could
allocate and map new pages directly into the existing VA range.
So for workloads where shrinking and growing occur frequently,
this approach lays better groundwork.

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

* Re: [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check
  2026-05-07 19:06         ` Shivam Kalra
@ 2026-05-08 15:27           ` Uladzislau Rezki
  0 siblings, 0 replies; 10+ messages in thread
From: Uladzislau Rezki @ 2026-05-08 15:27 UTC (permalink / raw)
  To: Shivam Kalra
  Cc: Uladzislau Rezki, Andrew Morton, linux-mm, linux-kernel,
	Alice Ryhl, Danilo Krummrich

On Fri, May 08, 2026 at 12:36:18AM +0530, Shivam Kalra wrote:
> On 07/05/26 22:51, Uladzislau Rezki wrote:
> > On Thu, May 07, 2026 at 01:13:35AM +0530, Shivam Kalra wrote:
> > > On 07/05/26 00:17, Uladzislau Rezki wrote:
> > > > Maybe we should consider Fujunjie approach and borrow his idea to shrink VA also?
> > > > In that case, we do not need to switch to vm->nr_pages? And we do not
> > > > need
> > > > 
> > > > [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter()
> > > > 
> > > > ?
> > > > 
> > > > --
> > > > Uladzislau Rezki
> > > I didn't want to change the va in this patch series and wanted to keep
> > > it simple.
> > > If we change the va, we will also need to rebalance the rb tree.
> > > I can work on a followup patch series if VA space pressure is critical.
> > > 
> > Actually it is not critical. The idea is if we shrink VA then we do not
> > need care much about the size thus keeping vread_iter() unchanged as
> > well as [PATCH v12 2/5]? at least partly.
> > 
> > I am find with it anyway.
> > 
> > Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > 
> > --
> > Uladzislau Rezki
> 
> Thanks for the review.
> 
> There's actually one more benefit of this approach for a future
> grow-in-place optimization: since the VA reservation is kept intact
> after a shrink, a subsequent grow wouldn't need to allocate a new
> virtual address range or manipulate the vmap_area tree. It could
> allocate and map new pages directly into the existing VA range.
> So for workloads where shrinking and growing occur frequently,
> this approach lays better groundwork.
>
Fair point, so there are pros and cons.

--
Uladzislau Rezki

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

* Re: [PATCH v12 0/5] mm/vmalloc: free unused pages on vrealloc() shrink
  2026-05-05 15:42 ` [PATCH v12 0/5] mm/vmalloc: free unused pages on vrealloc() shrink Shivam Kalra
@ 2026-05-09  0:27   ` Andrew Morton
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2026-05-09  0:27 UTC (permalink / raw)
  To: Shivam Kalra
  Cc: Uladzislau Rezki, linux-mm, linux-kernel, Alice Ryhl,
	Danilo Krummrich

On Tue, 5 May 2026 21:12:15 +0530 Shivam Kalra <shivamkalra98@zohomail.in> wrote:

> > base-commit: 4f7b2cc1ad8719d55a8de9675a0aca65cb17c364
> > change-id: 20260302-vmalloc-shrink-04b2fa688a14
> > 
> > Best regards,
> Gentle thread bump. Let me know if you have any feedback.

It's been a while - I suggest a resend.

For some reason AI review couldn't apply v12
(https://sashiko.dev/#/patchset/20260428-vmalloc-shrink-v12-0-3c18c9172eb1@zohomail.in)
- perhaps it'll work next time.


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

end of thread, other threads:[~2026-05-09  0:27 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20260428-vmalloc-shrink-v12-0-3c18c9172eb1@zohomail.in>
2026-05-05 15:42 ` [PATCH v12 0/5] mm/vmalloc: free unused pages on vrealloc() shrink Shivam Kalra
2026-05-09  0:27   ` Andrew Morton
     [not found] ` <20260428-vmalloc-shrink-v12-4-3c18c9172eb1@zohomail.in>
2026-05-06 18:27   ` [PATCH v12 4/5] " Uladzislau Rezki
     [not found] ` <20260428-vmalloc-shrink-v12-3-3c18c9172eb1@zohomail.in>
2026-05-06 18:28   ` [PATCH v12 3/5] mm/vmalloc: use physical page count in vread_iter() Uladzislau Rezki
     [not found] ` <20260428-vmalloc-shrink-v12-1-3c18c9172eb1@zohomail.in>
2026-05-06 18:32   ` [PATCH v12 1/5] mm/vmalloc: extract vm_area_free_pages() helper from vfree() Uladzislau Rezki
     [not found] ` <20260428-vmalloc-shrink-v12-2-3c18c9172eb1@zohomail.in>
2026-05-06 18:47   ` [PATCH v12 2/5] mm/vmalloc: use physical page count for vrealloc() grow-in-place check Uladzislau Rezki
2026-05-06 19:43     ` Shivam Kalra
2026-05-07 17:21       ` Uladzislau Rezki
2026-05-07 19:06         ` Shivam Kalra
2026-05-08 15:27           ` Uladzislau Rezki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox