From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01A6C35AC03 for ; Wed, 18 Mar 2026 17:53:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773856395; cv=none; b=hyGRdhLkIcM1MGigvem9Ht/cNzJT6FeEPdaV2uUSwHnQOubTW/HZa8X/yVOGVRuDl5SVYVGOnMsZ3hX3kAhFme5oyRt2jeQVmOycNHqVxJmcFRBo/Zx8V5PEcq73Z7plBNXAKLlsQfw+xEQNmwlGoUL8tfHOQyLyEtRu0u6XNZo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773856395; c=relaxed/simple; bh=3ptOn3fEi6WMT6qFnSy/GZWEsXSAPmk3Ae/FnBeM9kY=; h=From:Date:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=XZjRb0oTyUr/HyT4geFg4R7J11sa3GNJL63OC5IGcDGhmKJwZnO5S4lUF1+BnkEkCoVkoyt97knEcBG3HgiA6/KGVTOswgSLqz0DmS61tm4TJlKJ8mSmINId3SLfYtG5NggyfyFl6GA57GXHVlGGLJo6Aw/SJJ2+bJKf8Gb4nqQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=S4jCX+Wb; arc=none smtp.client-ip=209.85.167.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="S4jCX+Wb" Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-5a12c310e8aso121261e87.3 for ; Wed, 18 Mar 2026 10:53:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773856390; x=1774461190; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=QjV2QZzHL9l+hZN/pbl5bOZQEFWnVMl5pJ0Dn0m8n2Y=; b=S4jCX+Wb8KDgSY4B5B3sWK8BlN3U7PcALKNX7Zd1/A0YnHqvZ+afAuS24hypjVFsMS zBJymfUg/xyHhBVIOgPC6Oz1T2ZKGjB7L9WFahwkNczRrHo8oWh23TlCX+tgS0kduIuD RBhtMR0aL3A0/h30pAVGdnWNcG6Z/N7LZJ5+7sSQ6+t1/cHhUV0Fkta0aQyMj/mf1OIl 5qG5d0UQntUQPkbndS9WA4UMSg++DyA43TBR+WJy2b4+q8fg+8XllOzh/r1caR+UivP6 QaHsDlEKjRhWCldNjq030WDTdcyOLWqW4iGvLBPxVeilnYFTatCw3XCn/ppMHf3RUbEx UGRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773856390; x=1774461190; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QjV2QZzHL9l+hZN/pbl5bOZQEFWnVMl5pJ0Dn0m8n2Y=; b=qDzrFA4ez2giGqc9ZwYK6KjbW3qq0aVRCYIDSF/9mQ+4HQlug+oQxGIP5miZCrZNF6 efvTurDFVVLf+dMme/wkvrjbhrY7IIDqFh1pilR2/e03U+npLzTOR88/PufMwHHqHAko wbUGtbRp477YJmalUmEjtDEX3p26MLAqcaIFA/BDvqlolSyniseHTtoQhIgP4V67HCv2 +XcQr62wRzihqSKSqjWIsCQMHYZ0n0cnDuYkxcUB32QamA6hobH2TD5Zx+xvk+9zexhb dzERG7eIBxFzXNu7/q8Cfz+lHxow1hKZI1hkLmXf4ZRR6bMmQ/ByvUV+we//CVm7qNA7 7rIQ== X-Forwarded-Encrypted: i=1; AJvYcCUAQ2xmFL+MJyWc1YqS6auBcVn+CsWzapVCkvYVRJM2S4sAb/HHVsjhRWRm8v3tRCz721NxKIQlm9W/tm0=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2PL3zj1jcWyDnPCnFPqt7kjYzxnVzyfbigOij8IVlK6jp92vI /b2swpFN3ydIvbMR6kmQLCXH7PKwnYlfNhqyY8Yw0M02F32QzWHmpHqxgvSH9a/D X-Gm-Gg: ATEYQzxNdhEpkuZ9YLliwK1HYevk4+DzUuq7rgCwqAIfFkjbl1fdB7Glz9OWbUMVWrd zO9lNHd8Ukeb7C4II4PT6uQwmjDxEh2TjWLaJqf3GrW4X5q+6HB0aPlXcjMyguxTgWQt1m4CjZ8 wNTE8P0mWJnSaDZub0JKagvA/9gX6STE6Zeu7s8TLkQLKU+5HGStjUIFve8rblff27Pwk6fGbUO dd0BGtqR+sj/Xh/Mh987Y0nkQR1ERvZ+rrE/gY/9TnE8uRS8yXWIfebhkhgojiod0s6CfhDsVvo c6tZacqREdwgzSTUMeifJL4t15/oUFCd5rXYqfnrUotfGqPLhxuML2YYVVaBBFf5IlmqtCd1EiW W0nNgpMGuYpp9nC28HD43O2eo+xPvNbPulid7Md0fulerCJIGDmJQi9RkSkA1tnblGD6Jk15tVG 4= X-Received: by 2002:a05:6512:2390:b0:5a1:34d2:b6da with SMTP id 2adb3069b0e04-5a2796b3872mr1813995e87.31.1773856389225; Wed, 18 Mar 2026 10:53:09 -0700 (PDT) Received: from milan ([2001:9b1:d5a0:a500::24b]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a279c79442sm669216e87.70.2026.03.18.10.53.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 10:53:08 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Wed, 18 Mar 2026 18:53:07 +0100 To: shivamkalra98@zohomail.in Cc: Andrew Morton , Uladzislau Rezki , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Alice Ryhl , Danilo Krummrich Subject: Re: [PATCH v5 1/3] mm/vmalloc: extract vm_area_free_pages() helper from vfree() Message-ID: References: <20260317-vmalloc-shrink-v5-0-bbfbf54c5265@zohomail.in> <20260317-vmalloc-shrink-v5-1-bbfbf54c5265@zohomail.in> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260317-vmalloc-shrink-v5-1-bbfbf54c5265@zohomail.in> On Tue, Mar 17, 2026 at 01:47:33PM +0530, Shivam Kalra via B4 Relay wrote: > From: Shivam Kalra > > Extract the page-freeing loop and NR_VMALLOC stat accounting from > vfree() into a reusable vm_area_free_pages() helper. The helper operates > on a range [start, end) 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 > --- > mm/vmalloc.c | 47 +++++++++++++++++++++++++++++++++-------------- > 1 file changed, 33 insertions(+), 14 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index c607307c657a..b29bf58c0e3f 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3416,6 +3416,38 @@ 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: first page index to free (inclusive) > + * @end: last page index to free (exclusive) > + * > + * Free pages [start, end) 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, > + unsigned int end) > +{ > + unsigned int i; > + > + for (i = start; i < end; i++) { > + struct page *page = vm->pages[i]; > + > + BUG_ON(!page); > + /* > + * High-order allocs for huge vmallocs are split, so > + * can be freed as an array of order-0 allocations > + */ > + if (!(vm->flags & VM_MAP_PUT_PAGES)) > + mod_lruvec_page_state(page, NR_VMALLOC, -1); > + __free_page(page); > + vm->pages[i] = NULL; > + cond_resched(); > + } > +} > + > Since you will update second patch, probably you can also improve this one. To me start/end variables sound like a VA range whereas it is indices in the array. Any thoughts? -- Uladzislau Rezki