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 D0AE6C77B7C for ; Tue, 24 Jun 2025 12:39:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5E91C8D0007; Tue, 24 Jun 2025 08:39:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5C0BE8D0001; Tue, 24 Jun 2025 08:39:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4FDA58D0007; Tue, 24 Jun 2025 08:39:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 39D938D0001 for ; Tue, 24 Jun 2025 08:39:16 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 092F61D73A7 for ; Tue, 24 Jun 2025 12:39:16 +0000 (UTC) X-FDA: 83590249512.25.51F1E13 Received: from mailrelay6-3.pub.mailoutpod3-cph3.one.com (mailrelay6-3.pub.mailoutpod3-cph3.one.com [46.30.212.11]) by imf18.hostedemail.com (Postfix) with ESMTP id 08BCE1C0005 for ; Tue, 24 Jun 2025 12:39:13 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=hKXBcyCt; dkim=pass header.d=konsulko.se header.s=ed1 header.b=MB3dR8WM ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750768754; a=rsa-sha256; cv=none; b=TzbDZSjc5hL6Dz67yPf5Pz5WTY4i9jN3a4ap4WpbTayAXdwHThV694onW+m3JjBsR8Xw5j RnXSmaZcy7lrqUjLbb1Ugs3jr2ZTVTVBg0SF4tszU9qKx66Btrk2eme46KgzQousO0zrvq /fuRN1edzW1WZvpqztee2i5oYuutz3A= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=hKXBcyCt; dkim=pass header.d=konsulko.se header.s=ed1 header.b=MB3dR8WM; spf=none (imf18.hostedemail.com: domain of vitaly.wool@konsulko.se has no SPF policy when checking 46.30.212.11) smtp.mailfrom=vitaly.wool@konsulko.se; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750768754; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Y2ViI0m6Ko/2vCWgWrN+qyTDBaY8p8ed02QkoJAaUgU=; b=3Edys7ReFKPy3UhoVphXiT7dPdj/2FJF/pblUqCB58Ixh6fH0r2cDcU5JoJTbepLdJc5df dItMpnXuQ+k5UCoVMCxPDTc6nSc4ntF+svO7inj8q07BJPukEEoub4kbgMFFhDYKZfGcWT ybdoHvMEOszvNlNZDSlBCH6e+wz1xkE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1750768751; x=1751373551; d=konsulko.se; s=rsa1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=Y2ViI0m6Ko/2vCWgWrN+qyTDBaY8p8ed02QkoJAaUgU=; b=hKXBcyCtTZxzLkN8mpgHSAfYZEWU5l+qCuOSVj7cNfRCA5yA8LHoOeCLe8x4xWHcfUxAPhGydbBRU J8G76QvBJs9kYkWc0pi8CjmONrJUvbnSVw3guNwyXP7GOpiHti6bRj2amUWkyprqO8f43BJHw2o9yj OS4BUuukZaG+b1x+XlKIuHn30VW4HY4gpOWXo1Bpprgzlg+qr+XLtq2vxWkLNIajeGCvEl+mEfuq9x kQSOFnrawVjOd6cHcXatVNtdNPuuanWfLlg6dKWhSJ/65OldvxKLGhG9KJVRQWOv+Rlv7MaXToy8YL w6K1ohoOZRTkei92DmmhBxhLjW4T4og== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1750768751; x=1751373551; d=konsulko.se; s=ed1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=Y2ViI0m6Ko/2vCWgWrN+qyTDBaY8p8ed02QkoJAaUgU=; b=MB3dR8WMaOW2GcVuKef7Hy+l/TxqwQ9K9miFC3174PDQTm8/6rsk6qwOneg98wNrbrtLOFyaMtPhm pyW18P+Bw== X-HalOne-ID: 39ceac8b-50f8-11f0-b346-417246ffdc90 Received: from slottsdator.home (host-90-238-19-233.mobileonline.telia.com [90.238.19.233]) by mailrelay6.pub.mailoutpod3-cph3.one.com (Halon) with ESMTPSA id 39ceac8b-50f8-11f0-b346-417246ffdc90; Tue, 24 Jun 2025 12:39:11 +0000 (UTC) From: Vitaly Wool To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, Uladzislau Rezki , Danilo Krummrich , Alice Ryhl , rust-for-linux@vger.kernel.org, Vitaly Wool Subject: [PATCH v2 1/2] mm/vmalloc: allow to set node and align in vrealloc Date: Tue, 24 Jun 2025 14:38:59 +0200 Message-Id: <20250624123859.3258172-1-vitaly.wool@konsulko.se> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250624123743.3258032-1-vitaly.wool@konsulko.se> References: <20250624123743.3258032-1-vitaly.wool@konsulko.se> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: c4w8st4jq86zt7cdgppf11kg8gp97j94 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 08BCE1C0005 X-Rspam-User: X-HE-Tag: 1750768753-683548 X-HE-Meta: U2FsdGVkX1+dj8I5xg/N+EKJTcDbV2ia3UnLGYzQu7Z8of76l3a8iwgodpGrRe1u8PyZWjSj9vCjwQaHD/6qt88+W4MDJYvMw6JnyNsdVD2yYkGJml3XbNufT1g6Z4FZK+t0q4UfLxVHLJbbz7ldJxfCm2OwqMid3cmo5evPOZNlIUxKCsS1wSvXzo7GAUbhZ+fncXmV852k7rwocWkPI0PPQ1X5x6BQY6geIsGBUO35h4mDITPFpk9fTVkKpWZ8e21QBRdJp0SgD/VzYWtqQvDwR1ZpVdjh2dzVuoCY0tFtaRpAgecCbGNuvU2JzacizbjF2brAIgi9Ly6/9zE0rM7ynjqbvAeKMNN0Dx1Wm3FHkWCcF8LAiEqp8c3pLtyrGQNhFfCJVA+tlYeWk8xvUFb3vrD8NMcuFVE3Ai6qFwIPy4LW6yBRcKehGQDNC0IwXSTB3XvByWOF8vaAyOwbRp37/I+gveQ5jPVkBk5x9ACQTz/ehj6aXgS/8MqCs9O3xyVbmIIpAj/r41jNN/Y9Is/OVJoX7odXd7WHjdVpVskYOcewze8age4tr1WCMRILmYDc6V/0iTDHx37nGmvZuZrYnrrDJ/S46AtlA+piFnc3ZnG2jtRSif0tjaEpZWAbkvlec0L0QwfcPU6f/pfb8SETmDa4sJd7xjM+laR8R7HBetrpAVp5lEYELWzx6B+K0e996hwFgL1q4XnFptFyCGXUSvVCfmOh7WUmCJxNWRO9OfxcmoZuyDlZs2s/jj89FUm0QLu7aD2xZCSuc+gw4yazZq/hPQqm9UCe0cq4Z341xIDGJvQ/tYfH4eDF2F8/jngQeWu8BnY7DrRlPOeJ0Xx9NSsnOgaeemvpMz7pIwqQyPf/kUTYmUEVtQypPzlMJaO4zEOqx4PtjIVH6epZmVRKvC5biCz1vKnZyC8m95Osoc8aykRJMDQdOKhEdVKYO5NbTRE1hzxW7oMKjhU CMl0g9ui ueMQXFuIbtOFQtQARdKOpzBBiVfN+HloYHnnfEMnsSFmLfcjkA6BfLI94/wInoasjFynsCuOSo1XD+q2x98EWjV5SzTWVC6HgHdHGTwc4U0AxiQLdAxOgwdtTlefu1yWUwhxR 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: 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. With that change we also provide the ability for the Rust part of the kernel to set node and aligmnent in its allocations. Signed-off-by: Vitaly Wool --- include/linux/vmalloc.h | 8 +++++--- mm/vmalloc.c | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) 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__)) -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__)) 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); /** - * 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 = NULL; size_t alloced_size = 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 != NUMA_NO_NODE && nid != 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; } /* @@ -4158,7 +4167,8 @@ void *vrealloc_noprof(const void *p, size_t size, gfp_t flags) } /* TODO: Grow the vm_area, i.e. allocate and map additional pages. */ - n = __vmalloc_noprof(size, flags); + n = __vmalloc_node_noprof(size, align, flags, nid, __builtin_return_address(0)); + if (!n) return NULL; -- 2.39.2