From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0171E342173 for ; Wed, 27 May 2026 06:25:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779863131; cv=none; b=oQyzFmN3+5cgcAyly737CW3eG5KDqEhMRX4ovoTPoS4b9TAIz80bjQ0W7/VXnE/uwiP5hnwNWVy3FF98/pvV0j5tlbLn2rYp9WSjPh31YVUhVWiRKqLmbC6Zqef/p6OeuyLwqv0uFSr/w+3Ps5Eb8O3+v1m77TDbzvtryZxhFgw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779863131; c=relaxed/simple; bh=XYu6VQADzDpdw6q2TY6lK1+GI951HIpJzp0bX60oZgU=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=JTwbEymn8UAV4veCWaR7JDCoF66efjLu17qYc9WO8WWhrZPPJtNiBHZ4YBKCBO5EFUVAcB5PFIKiq1J3hFIFMtdK+0CYVsgMflRFZfB7whskSi5w8juKSBzPfys4QetmmarpQIjyb3UPHMfBRmhgTuK0ez82g7PgUGCFMXTAhx8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=PydP0Ujd; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="PydP0Ujd" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0538016F2; Tue, 26 May 2026 23:25:21 -0700 (PDT) Received: from [10.164.19.7] (unknown [10.164.19.7]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0A8BB3F7D8; Tue, 26 May 2026 23:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1779863126; bh=XYu6VQADzDpdw6q2TY6lK1+GI951HIpJzp0bX60oZgU=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=PydP0UjdZDCNTpScwrFAsMRsTLKwFIK5YBghaJduK7HGmvo3TZq2q2T+sFXXX+2gf MwwRXey5UkH5o+sbVLxMa+putsdHUQ792P59cEXT9BIZrcuEAI92zO0/yD4aXgRpMH rjWFdBF1fQ8EBemiyat4eK/Kw+oHpwIRoZos6Oqs= Message-ID: <3f55655c-b50b-45fa-9314-23e35d04ae7e@arm.com> Date: Wed, 27 May 2026 11:55:17 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 6/6] mm/vmalloc: align vm_area so vmap() can batch mappings To: Wen Jiang , linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, will@kernel.org, akpm@linux-foundation.org, urezki@gmail.com Cc: baohua@kernel.org, Xueyuan.chen21@gmail.com, rppt@kernel.org, david@kernel.org, ryan.roberts@arm.com, anshuman.khandual@arm.com, ajd@linux.ibm.com, linux-kernel@vger.kernel.org, jiangwen6@xiaomi.com References: <20260522053146.83209-1-jiangwenxiaomi@gmail.com> <20260522053146.83209-7-jiangwenxiaomi@gmail.com> Content-Language: en-US From: Dev Jain In-Reply-To: <20260522053146.83209-7-jiangwenxiaomi@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 22/05/26 11:01 am, 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 Hmm okay I would have preferred to squash this in the previous, but the correctness of previous patch does not rely on this, so it's fine. > --- > mm/vmalloc.c | 33 ++++++++++++++++++++++++++++++++- > 1 file changed, 32 insertions(+), 1 deletion(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 50642246f4d40..040d400928aab 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3620,6 +3620,37 @@ static int vmap_batched(unsigned long addr, unsigned long end, > return err; > } > This is screaming for a helper :) > +static struct vm_struct *get_aligned_vm_area(unsigned long size, > + unsigned long flags, const void *caller) Call this vmap_get_aligned_vm_area, then ... > +{ > + struct vm_struct *vm_area; > + unsigned int shift; > + > + /* Try PMD alignment for large sizes */ > + if (size >= PMD_SIZE) { > + vm_area = __get_vm_area_node(size, PMD_SIZE, PAGE_SHIFT, flags, > + VMALLOC_START, VMALLOC_END, > + NUMA_NO_NODE, GFP_KERNEL, caller); Add a wrapper over this called __get_vm_area_node_aligned_caller, which can call __get_vm_area_node() with all other arguments fixed, except "align". > + if (vm_area) > + return vm_area; > + } > + > + /* Try CONT_PTE alignment */ > + shift = arch_vmap_pte_supported_shift(size); > + if (shift > PAGE_SHIFT) { > + vm_area = __get_vm_area_node(size, 1UL << shift, PAGE_SHIFT, flags, > + VMALLOC_START, VMALLOC_END, > + NUMA_NO_NODE, GFP_KERNEL, caller); > + if (vm_area) > + return vm_area; > + } > + > + /* Fall back to page alignment */ > + return __get_vm_area_node(size, PAGE_SIZE, PAGE_SHIFT, flags, > + VMALLOC_START, VMALLOC_END, > + NUMA_NO_NODE, GFP_KERNEL, caller); > +} > + > /** > * vmap - map an array of pages into virtually contiguous space > * @pages: array of page pointers > @@ -3658,7 +3689,7 @@ void *vmap(struct page **pages, unsigned int count, > return NULL; > > size = (unsigned long)count << PAGE_SHIFT; > - area = get_vm_area_caller(size, flags, __builtin_return_address(0)); > + area = get_aligned_vm_area(size, flags, __builtin_return_address(0)); > if (!area) > return NULL; >