From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4310AC77B7C for ; Tue, 24 Jun 2025 12:15:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE8216B009E; Tue, 24 Jun 2025 08:15:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C71146B009F; Tue, 24 Jun 2025 08:15:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AEAD56B00A1; Tue, 24 Jun 2025 08:15:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 98DB56B009E for ; Tue, 24 Jun 2025 08:15:17 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3F8621A065F for ; Tue, 24 Jun 2025 12:15:17 +0000 (UTC) X-FDA: 83590189074.23.B3A213E Received: from mailrelay5-3.pub.mailoutpod3-cph3.one.com (mailrelay5-3.pub.mailoutpod3-cph3.one.com [46.30.212.10]) by imf30.hostedemail.com (Postfix) with ESMTP id D34A880006 for ; Tue, 24 Jun 2025 12:15:14 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=O1Y3yI7y; dkim=pass header.d=konsulko.se header.s=ed1 header.b=bZ6Ahj+E ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750767315; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=M1Kg+66kgHeJqX/QTGsvuXZbak7RCmywd80sh5ukf3U=; b=D+ApXPAVO4XM1pMYXE771XXL3Bm0ZpoyRLQUznsBsIekuMza+qU0VFe+Xk1I5OVE0GGCL6 2mzltGsFVAInpg/dO9N0Jq8lp8bNR6CKLyLfiIS/mPTn5hxugqHk5DdRYxwuvXeJLYrMuE dc/yG3FZ+Rmx2TvJh3EUblMiaHyn728= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=O1Y3yI7y; dkim=pass header.d=konsulko.se header.s=ed1 header.b=bZ6Ahj+E; spf=none (imf30.hostedemail.com: domain of vitaly.wool@konsulko.se has no SPF policy when checking 46.30.212.10) smtp.mailfrom=vitaly.wool@konsulko.se; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750767315; a=rsa-sha256; cv=none; b=lCmK9axSGRztKwEIn3t843u0R1PTMSIoTpe5n4wTH/gIAOQdOKjnxVE896OA1a9jamjUAf 2gGfNnhZ676hOrsIeFlOgerz7Tj5b+w+IIhdp+5/9UB9O0gLYZ1MYgWr6Ac/B+3Vd8XeDl QK8ZSAVQGhMwt6W7Cb6dlPvWButgFqc= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1750767312; x=1751372112; d=konsulko.se; s=rsa1; h=to:references:message-id:content-transfer-encoding:cc:date:in-reply-to:from: subject:mime-version:content-type:from; bh=M1Kg+66kgHeJqX/QTGsvuXZbak7RCmywd80sh5ukf3U=; b=O1Y3yI7yDGtiM9CJBlbGz+wXBfbYrUpUbsnMBZ/MQBv16Gl7XVKButbAve9mGYAp3S8jgAdDUgGn6 IkOTDz5oDWzMCszy22AG/G4qECmO7V0pU8ocjI+WlCSiwgL9xHypEuZTGWN3vQRXcTdvgfLZjBeo7E 70jjzTwYge3Wh9WF8uGmu01fWKRi80HuxrL5D6hWzJxlEQsAsM5Y0yBLz4/mz87EslFz/ji+v5JNCZ H7pbrka4q9qZ4PvSAQTLz/KPJJsBJz21qRAlpOUxfXRTNW5BrFF40J8G/QPy2dYyR/XMHt7LE7Ak2x xUmf56OJ2hJLKHP8fVeWEjRn05oIy4w== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1750767312; x=1751372112; d=konsulko.se; s=ed1; h=to:references:message-id:content-transfer-encoding:cc:date:in-reply-to:from: subject:mime-version:content-type:from; bh=M1Kg+66kgHeJqX/QTGsvuXZbak7RCmywd80sh5ukf3U=; b=bZ6Ahj+ExbkkRKMS4MKnICYB62Nu0dxU9dEaCvG8p/lb+BVUOP+EBn9ZfKDKz+TULZ0c2AzmSzsu7 MmvVSCSCQ== X-HalOne-ID: df90b046-50f4-11f0-af95-d7c209f8bd06 Received: from smtpclient.apple (host-90-233-201-126.mobileonline.telia.com [90.233.201.126]) by mailrelay5.pub.mailoutpod3-cph3.one.com (Halon) with ESMTPSA id df90b046-50f4-11f0-af95-d7c209f8bd06; Tue, 24 Jun 2025 12:15:12 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.200.121\)) Subject: Re: [PATCH] mm/vmalloc: allow to set node and align in vrealloc From: Vitaly Wool In-Reply-To: Date: Tue, 24 Jun 2025 14:15:01 +0200 Cc: linux-mm@kvack.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, Danilo Krummrich , Alice Ryhl , rust-for-linux@vger.kernel.org Content-Transfer-Encoding: quoted-printable Message-Id: References: <20250624095121.3243540-1-vitaly.wool@konsulko.se> To: Uladzislau Rezki X-Mailer: Apple Mail (2.3826.200.121) X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: D34A880006 X-Stat-Signature: odtc9y7rmwxioziufbiebsxz695q44c3 X-HE-Tag: 1750767314-64122 X-HE-Meta: U2FsdGVkX1+FU9RWo1ZbnVU7tRhnbDAw4PESQREyujJsjqJPm+W7R+FPfFGbhvS3WP8VcjgLDzhPn6ynUMvdAaSXg13vg64/7VKtvQB51X65YlwfEwUPakHe5WCtryeHHeFSDBKK8tVYA+VWvzFmntYfapRZ0VkKFwrySYXgFLOQAm7fB5ivU8Pb0f/EwOJ0tCUzRvtcH1elgqYnAyVFyQpn+SLu5Y0wnJ3EXJ2/NJCjkdFCdWuZOxd8xK+nJaAN9xjmRMH9QDi5BistnxAPq+SYSjbZ4IF0T4R3cjiFDNXIc1bTenKnkeUhCMMucCyid0tJfiiuRC2RB7WfxuS9IubY5u/Lr2QE7x2oAhUVk3VgVvype78bXUhYSeCWBJrY5BoP4/a+1uVDEOniah2fMhCK7v4BYi4l/0by9XYnCWl6q9YskvrgQY3umo4Og/M8NaFpQxYmobRlshlJeWhYH3C/ZuQoFjuZ4f1Ozq2Q9qUpzpZ5aL6wXmm8pdxyiiR7OTATvjGxbOT/KImggh09vofvm/9IvDk8VaCTxX1nlaWgUF2o2VOtz2GsId31TOIad9DMvMSvYOqkEc3fvfpT8ymwWlWgyLJ+a0IR/TuvrqDdfY6YWvhTfLOR73WMpjNa0TmTaebU/6nnelDVady7g3w11zqwWpXejNZu2WUMq5rQlFDac7IxDETLo3oHSWPW1/k/FrUQkz4yRAoTAA5H7RjYg2UVSnEsc5bkHse0+5a7wC4ekp9OJQDxlXu76fllJE93Rfkh4UPPSjYR1cUAmFHNXcPykObIq4NJmAaxxuS8N6tpVJ6MvnUrYQOtBQzEcFWGfvDZ16NJTWoWwTIsjHRH4raFjARvsN4Q7JyzdgHgQB5DIXNq/9zfkoW+WcdCvqVNzhboWBx3IxNeTZKWIWV4CPC86Z3EbXWBfwi96Jl2/QuvDRIIUz1DCXZob886HI49j3qT+y/wqzKd+XR cHHjpDKu EeuKAlEMWfFJi+CBi7NdGfvLP8ncstfJVEpvtBxFmY2FLDv2nNPYkDFXpM/2EcP7ujL7Z+fUThsXDEM6ZEAYq0yWtvNsnF0uF9O79BDoqcnP0igYNdu8XBvaVv4cjSWhNHtVAe4nbNwkfcFJ7DafL7QaLkqhnwoyj7AbhCF/HhoglIG/8VJt+7DdBKh5ra5GCWEpSqCatDT2mS9m0mX0jYGbvaL2Y+lnHeWp5TyQWEq7WW4I= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: > On Jun 24, 2025, at 2:02=E2=80=AFPM, Uladzislau Rezki = wrote: >=20 > On Tue, Jun 24, 2025 at 11:51:21AM +0200, Vitaly Wool wrote: >> Reimplement vrealloc() to be able to set node and alignment should >> a user need to do so. Rename the function to vrealloc_node() to >> better match what it actually does now and introduce a macro for >> vrealloc() for backward compatibility. >>=20 >> With that change we also provide the ability for the Rust part of >> the kernel to set node and aligmnent in its allocations. >>=20 >> Signed-off-by: Vitaly Wool >> --- >> include/linux/vmalloc.h | 8 +++++--- >> mm/vmalloc.c | 16 +++++++++++++--- >> 2 files changed, 18 insertions(+), 6 deletions(-) >>=20 >> diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h >> index fdc9aeb74a44..7d5251287687 100644 >> --- a/include/linux/vmalloc.h >> +++ b/include/linux/vmalloc.h >> @@ -197,9 +197,11 @@ extern void *__vcalloc_noprof(size_t n, size_t = size, gfp_t flags) __alloc_size(1 >> extern void *vcalloc_noprof(size_t n, size_t size) __alloc_size(1, = 2); >> #define vcalloc(...) alloc_hooks(vcalloc_noprof(__VA_ARGS__)) >>=20 >> -void * __must_check vrealloc_noprof(const void *p, size_t size, = gfp_t flags) >> - __realloc_size(2); >> -#define vrealloc(...) alloc_hooks(vrealloc_noprof(__VA_ARGS__)) >> +void *__must_check vrealloc_node_noprof(const void *p, size_t size, >> + unsigned long align, gfp_t flags, int nid) __realloc_size(2); >> +#define vrealloc_noprof(p, s, f) vrealloc_node_noprof(p, s, 1, f, = NUMA_NO_NODE) >> +#define vrealloc_node(...) = alloc_hooks(vrealloc_node_noprof(__VA_ARGS__)) >> +#define vrealloc(...) alloc_hooks(vrealloc_noprof(__VA_ARGS__)) >>=20 >> extern void vfree(const void *addr); >> extern void vfree_atomic(const void *addr); >> diff --git a/mm/vmalloc.c b/mm/vmalloc.c >> index ab986dd09b6a..117894301db1 100644 >> --- a/mm/vmalloc.c >> +++ b/mm/vmalloc.c >> @@ -4081,10 +4081,12 @@ void *vzalloc_node_noprof(unsigned long size, = int node) >> EXPORT_SYMBOL(vzalloc_node_noprof); >>=20 >> /** >> - * vrealloc - reallocate virtually contiguous memory; contents = remain unchanged >> + * vrealloc_node - reallocate virtually contiguous memory; contents = remain unchanged >> * @p: object to reallocate memory for >> * @size: the size to reallocate >> + * @align: requested alignment >> * @flags: the flags for the page level allocator >> + * @nid: node id >> * >> * If @p is %NULL, vrealloc() behaves exactly like vmalloc(). If = @size is 0 and >> * @p is not a %NULL pointer, the object pointed to is freed. >> @@ -4103,7 +4105,7 @@ EXPORT_SYMBOL(vzalloc_node_noprof); >> * Return: pointer to the allocated memory; %NULL if @size is zero or = in case of >> * failure >> */ >> -void *vrealloc_noprof(const void *p, size_t size, gfp_t flags) >> +void *vrealloc_node_noprof(const void *p, size_t size, unsigned long = align, gfp_t flags, int nid) >> { >> struct vm_struct *vm =3D NULL; >> size_t alloced_size =3D 0; >> @@ -4127,6 +4129,13 @@ void *vrealloc_noprof(const void *p, size_t = size, gfp_t flags) >> if (WARN(alloced_size < old_size, >> "vrealloc() has mismatched area vs requested sizes (%p)\n", p)) >> return NULL; >> + if (WARN(nid !=3D NUMA_NO_NODE && nid !=3D = page_to_nid(vmalloc_to_page(p)), >> + "vrealloc() has mismatched nids\n")) >> + return NULL; >> + if (WARN((uintptr_t)p & (align - 1), >> + "will not reallocate with a bigger alignment (0x%lx)\n", >> + align)) >> + return NULL; >> } >>=20 >> /* >> @@ -4158,7 +4167,8 @@ void *vrealloc_noprof(const void *p, size_t = size, gfp_t flags) >> } >>=20 >> /* TODO: Grow the vm_area, i.e. allocate and map additional pages. */ >> - n =3D __vmalloc_noprof(size, flags); >> + n =3D __vmalloc_node_noprof(size, align, flags, nid, = __builtin_return_address(0)); >> + >> if (!n) >> return NULL; >>=20 >> --=20 >> 2.39.2 >>=20 > Do we have users which require alignment and nid? I see that it is = part > of kvrealloc() API only. >=20 There=E2=80=99s a patch pending inclusion of this one which will be the = user of this change. I was reluctant to combine these 2 in one series because the second one is on the Rust = side, but it can be found here: https://github.com/vwool/linux-mm/pull/new/realloc-extend. ~Vitaly=