From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 622F23AF64B for ; Wed, 20 May 2026 09:12:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779268365; cv=none; b=L6nOZW4+oHsP4ka3ZPipYVTMwkW+qZc2kqoc2GFpp5AGOBgLcGsCVee0YFZm6VRuw8NkEPpebFMtCJvvN6uf5spYL/qU44BNUIBqWanQvVvrQ2bLEd9DlCHWkaggZfIf/WAol7Gzl5il+BvFVRrJOgy+TZAIMheZXHaqzov6kxw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779268365; c=relaxed/simple; bh=GuZbTKDNtsvHP6wTBrZGnc0b32KErnCmq0V3jKb3GnU=; h=From:Date:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=E59IJjVBwePenW8neHBi3PwgIczmMp0Srpep1CkZ1Elm+yazuY8PDiei5f6HftGdTd9/maJie/e8GoKuDp0MlGle+Lc2/rAL4gFonnfgnvM31bdsg5LHu1SEVRxg/zi0l0yhhmxFIxxwT0GaT+1dsuTQ/kbtkYF/7qNibdG0iJQ= 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=BlHJkeWH; arc=none smtp.client-ip=209.85.167.42 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="BlHJkeWH" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5a8ee4b703fso4478853e87.0 for ; Wed, 20 May 2026 02:12:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779268362; x=1779873162; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:date:from:from:to :cc:subject:date:message-id:reply-to; bh=XVK9lCG8t/9sfDORk8nI6RMdbwpsR4qFe6/O61rN3aw=; b=BlHJkeWHPBsdmcCj821zxlPQhfZBcescKWA61716UePk+MlWKUVh/E+Y34/wb9CWjl fBjFtsaXCn4oFERxwsZEymvluBSSLxcpSZ3fpv1srq5TyR7uCmQ9xksfrEHuu0xdniwd d3dz9I0d21STCNkzSy+1fnDLRrDxE4BC4ODuzUO7nSzznQVsfpr3VPKXB/de6mXXYr8d h7SAIWD+eK035Hss5zK1Br9egL9WHUVpEtbHqEovuIACI5h55xy3kfqjsikiuarbKyXQ mblnDnFl+iy1ALQUxqEyoq1p4sHw+dMRx7I5FjXL08pttrUcS4Htn3U6D5txWOG6iAmT lcmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779268362; x=1779873162; h=in-reply-to:content-transfer-encoding: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=XVK9lCG8t/9sfDORk8nI6RMdbwpsR4qFe6/O61rN3aw=; b=KtkOEqdSxJa/8EHrA826PeE2/uJ3Zomnh4BVcI2K8US+iyW8+O1ydUDvwMsfRtbp5I a3xoe0BwL1Og6oooDBWMbZ87hl9z6K/1jPgH8Ajg6K4OMgiqrqEkK2CzGXQHLulOB7Zz 29e9pBJj6gMu9C62Z4bLKimGxD2n9jO81ojNgrD9gqjF+O/JMJIezAFUvDrJ3ZXI1+Nu NxwJlsmRqx1iFugVkvqDemITO1VNqhm9KrQazR3iIkhLIh/msYBmlAlyRS/QWpImhx0V Z/pr4C9bVTwmNYWn/jDP/4WsJllPnYwzQLs7JqTNGMXXxEVD57sseuYimbCw4SuMuRyR RgGA== X-Forwarded-Encrypted: i=1; AFNElJ804+swEj+RM3uFwIaRpSTkHjzzhzWILWAwOP5M6GL24++5qLI9SYk1iKDrjVm943t/AHaV6eC1eedCNEg=@vger.kernel.org X-Gm-Message-State: AOJu0YyfNtue/UYyOLJHc6NrBDtgGk6I48d7b0qNshzhi/fyjamqmA2Y JTbBo/kTBKLKwEfQ1yN5Nzvr44t4w1WTC3tg9Bco6Atz58KCug9P4OlU X-Gm-Gg: Acq92OHCbGwvt4/SGCYdRN0LTgNraq1kiDBNnZl1ofcq/J8Q1wXuxmLM8CFwoQXGLRD Tk6IC6NgzIiaVEyiwWt4mCfYa0FkqYvqjOYeelF6Sx/9q/IvTjTJBrraETiHnluAYNrzGmecyum XjCCmgHJVWxARPWphW+bTP3a9oqvS4PgmS/KZykLu5oqWqns9N7bPrElcl37MLgAD1Il13tC4qe FyRV1zaZSIhuWCYQCyfhUL9fWp/6mQcKcWefnIAauEF5Rr8YC4WrhPiKV3qOGPUqO9BFuROxjl6 qNaXhKMwioo7fk5cTVDlWjjW1Q9UbLfP91PuYp0dcVw6hjBB+kHAzVjSs9G3qsZPyPh5T95BziF M2bRM8IaQzj2S0p2oUdsYngpDg1Of1kLXVvdSS5BVHhXpA/h3Qp1g1rB3zlUzVD0akMrld/AgEA DwTWSl/wTV4I+EhifS5kuwCfW8BC7xvjZfBnmJ9ZaGcfkuw3jO6CnFcA== X-Received: by 2002:a05:6512:6c8:b0:5a8:72e2:dba8 with SMTP id 2adb3069b0e04-5aa0e6191e4mr7180894e87.3.1779268361357; Wed, 20 May 2026 02:12:41 -0700 (PDT) Received: from pc636 (host-90-233-198-171.mobileonline.telia.com. [90.233.198.171]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a90f11a7c2sm4711004e87.32.2026.05.20.02.12.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 02:12:40 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Wed, 20 May 2026 11:12:37 +0200 To: Barry Song Cc: Uladzislau Rezki , Wen Jiang , linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, Xueyuan.chen21@gmail.com, dev.jain@arm.com, rppt@kernel.org, david@kernel.org, ryan.roberts@arm.com, anshuman.khandual@arm.com, ajd@linux.ibm.com, linux-kernel@vger.kernel.org, Wen Jiang Subject: Re: [PATCH v2 6/7] mm/vmalloc: align vm_area so vmap() can batch mappings Message-ID: References: <20260514094108.2016201-1-jiangwen6@xiaomi.com> <20260514094108.2016201-7-jiangwen6@xiaomi.com> 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=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Wed, May 20, 2026 at 03:55:02PM +0800, Barry Song wrote: > On Wed, May 20, 2026 at 3:37 PM Uladzislau Rezki wrote: > > > > On Thu, May 14, 2026 at 05:41:07PM +0800, Wen Jiang wrote: > > > From: "Barry Song (Xiaomi)" > > > > > > Try to align the vmap virtual address to PMD_SHIFT or a > > > larger PTE mapping size hinted by the architecture, so > > > contiguous pages can be batch-mapped when setting PMD or > > > PTE entries. > > > > > > Signed-off-by: Barry Song (Xiaomi) > > > Signed-off-by: Wen Jiang > > > Tested-by: Xueyuan Chen > > > --- > > > mm/vmalloc.c | 31 ++++++++++++++++++++++++++++++- > > > 1 file changed, 30 insertions(+), 1 deletion(-) > > > > > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > > > index c30a7673e..b3389c8f1 100644 > > > --- a/mm/vmalloc.c > > > +++ b/mm/vmalloc.c > > > @@ -3591,6 +3591,35 @@ static int __vmap_huge(unsigned long addr, unsigned long end, > > > return err; > > > } > > > > > > +static struct vm_struct *get_aligned_vm_area(unsigned long size, unsigned long flags) > > > +{ > > > + unsigned int shift = (size >= PMD_SIZE) ? PMD_SHIFT : > > > + arch_vmap_pte_supported_shift(size); > > > + struct vm_struct *vm_area = NULL; > > > + > > > + /* > > > + * Try to allocate an aligned vm_area so contiguous pages can be > > > + * mapped in batches. > > > + */ > > > + while (1) { > > > + unsigned long align = 1UL << shift; > > > + > > > + vm_area = __get_vm_area_node(size, align, PAGE_SHIFT, flags, > > > + VMALLOC_START, VMALLOC_END, > > > + NUMA_NO_NODE, GFP_KERNEL, > > > + __builtin_return_address(0)); > > > + if (vm_area || shift <= PAGE_SHIFT) > > > + goto out; > > > + if (shift == PMD_SHIFT) > > > + shift = arch_vmap_pte_supported_shift(size); > > > + else if (shift > PAGE_SHIFT) > > > + shift = PAGE_SHIFT; > > > + } > > > + > > > +out: > > > + return vm_area; > > > +} > > > + > > IMO, we should get rid of this while(1) loop. It looks like you need to > > handle just few cases. 3? > Hello, Barry! > > I don’t quite understand what you mean — are you suggesting > calling __get_vm_area_node() three times? We try 2MB first, > then 64KB, and finally 4KB. If 2MB succeeds, there is no > reason to try 64KB. Likewise, if 64KB succeeds, there is no > need to fall back to 4KB. > I mean either to make three cases kind of open-coded: ... if (size >= PMD_SIZE) alloc_vm_area_with_shift(PMD_SHIFT); if (vm_area) return vm_area; shift = get_supported_shift(size) if (shift > PAGE_SHIFT) alloc_vm_area_with_shift(shift); if (vm_area) return vm_area; return alloc_vm_area_with_shift(PAGE_SHIFT) ... or put everything into the: for (i = 0; i < 3; i++) - that way it will finish in any case and for user it is obvious that we handle max 3 scenario. > > > > > > shift min value is PAGE_SHIFT, could you please clarify when it can be less? > > I guess this should be changed to "==" ? > I assume shift can not be less than PAGE_SHIFT :) -- Uladzislau Rezki