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 551A1C83030 for ; Mon, 30 Jun 2025 22:16:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B50076B00A3; Mon, 30 Jun 2025 18:16:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B00356B00A4; Mon, 30 Jun 2025 18:16:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9EF6A6B00A5; Mon, 30 Jun 2025 18:16:23 -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 87AFD6B00A3 for ; Mon, 30 Jun 2025 18:16:23 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 3175CB6994 for ; Mon, 30 Jun 2025 22:16:23 +0000 (UTC) X-FDA: 83613476646.11.533AE28 Received: from mailrelay2-3.pub.mailoutpod3-cph3.one.com (mailrelay2-3.pub.mailoutpod3-cph3.one.com [46.30.212.1]) by imf23.hostedemail.com (Postfix) with ESMTP id 4EA72140006 for ; Mon, 30 Jun 2025 22:16:21 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=D+I0dwqm; dkim=pass header.d=konsulko.se header.s=ed1 header.b=LwGnb9Aq ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751321781; a=rsa-sha256; cv=none; b=H3/3MTyoAm4KfqNNWIMm5HPVmsB9Q8W8RByQCKzLLXPxFzdN11ODuU55ZUUofoINCE6Dat FeqoZDccBii9mKukoUSzdizfgUVDlB6sYSJdONKFawNJ1g8uCZK4f/TeIDP+qWYw54qhH1 NQ8H2vF0jiI0GL72nVZhcK2uqBFguew= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=D+I0dwqm; dkim=pass header.d=konsulko.se header.s=ed1 header.b=LwGnb9Aq; dmarc=none; spf=none (imf23.hostedemail.com: domain of vitaly.wool@konsulko.se has no SPF policy when checking 46.30.212.1) smtp.mailfrom=vitaly.wool@konsulko.se ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751321781; 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=c8OUTOJ9QXIZKHiAVisSVEZ4SA1EHQ39CWuIRc9zb34=; b=gUDvLyOthRAc6gA61fYjlmE8ZM9hW8+Fa5oIibtdbNyHzdGKkVM3nfAX/2M8NNbnMtVqER 8zOPwIk/k2fS0jaIhb0gRRkssA4AqzyN67v7+jaSbi1NRJnPSu8Ap3zZ0GPHeEWwT0+kVt SMI9IgI9fKzBJ8yrFuFC8UR2HigtyxA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1751321779; x=1751926579; d=konsulko.se; s=rsa1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=c8OUTOJ9QXIZKHiAVisSVEZ4SA1EHQ39CWuIRc9zb34=; b=D+I0dwqmAPoXotdh/DdKx53RAW/esHPU/sB+Wlf07DkduSmH/+k9qAl3f3psAtzRsmlXhDS9gyriZ YcmOYuaFR8lmrmGpvKpQd9ITV9n0lm33VjJbuVtKiOnRAzzXfOicCvQMQ/PhzW+FVvyiAoX4XRGTQZ n6O+XJL5DImAynvj+f25zOaQIHd+zmnLNIqGYJHw7itvK5lfDsRKiyKlokP+ELh+5LtaxmwYGgdlzB Y4PpbsWtzU3bjYVVmPmA6bKhUvkDpv9uLWLJCVCcrUwPBetakE8uBre4WRFvuNJxpQa+K2RjH3rNWF FC8KnhDm2+vH9amrHtQsDxxG5obbLjg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1751321779; x=1751926579; d=konsulko.se; s=ed1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=c8OUTOJ9QXIZKHiAVisSVEZ4SA1EHQ39CWuIRc9zb34=; b=LwGnb9Aqhrck1QYSdmBDPAUZaSDs75sbAEIkom7dtYOhQLAnRJZyyPoOArUZWeMy0c2HsU4vSj935 HRPsca4Cw== X-HalOne-ID: d79ef2f0-55ff-11f0-aa71-b37c246f863f Received: from slottsdator.home (host-90-238-19-233.mobileonline.telia.com [90.238.19.233]) by mailrelay2.pub.mailoutpod3-cph3.one.com (Halon) with ESMTPSA id d79ef2f0-55ff-11f0-aa71-b37c246f863f; Mon, 30 Jun 2025 22:16:19 +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 v9 1/4] mm/vmalloc: allow to set node and align in vrealloc Date: Tue, 1 Jul 2025 00:16:15 +0200 Message-Id: <20250630221615.3325221-1-vitaly.wool@konsulko.se> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250630221511.3325123-1-vitaly.wool@konsulko.se> References: <20250630221511.3325123-1-vitaly.wool@konsulko.se> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: dxhx4auixotkkwg7t3p9rzeaxi49rd3o X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 4EA72140006 X-Rspam-User: X-HE-Tag: 1751321781-224045 X-HE-Meta: U2FsdGVkX18VGRiPxFzPCWBqW4SbB48stfioEx+Q1q27KFHkrCFXlxw+xwBnnPY/puc+juUWj0g0S5abqT7XSs3FNApbmWYfdHYePPBPutss953KuJJshpP2dE9+ZTTtyfFqwDhXQ5NOEkbgOeBryo/Ieu8UV3SHpVM4rIWCCPToYot/Sn8KxWkjyp/ZqAF8gpNfu8OIuOMZ/RJlw4ZnoAe8J34Hw8Q4Qo8NmBduflgBFzb7Feu8HWGUamTQ/71pV7qeoLKIMjiAVtmhoAvv+oNTbpJmeSbjZHE3KGuKjqJaswb8wiA1BYK6spyKUdPzzjti/H2zGM84QXz+yPI/gYY8puvAnWjI5m71CTIkz/nGncnOOc8xL+a2+emjfvqGI3z6v5lUDij/ZLT6omSfV6jAxkPtDeKgsU3TJ63Tl6WXuqUovIfKfCkEKG7E2Acr7g50dv0IJQKgbH3REWCNqunG+B3AfW4Lrm6yJsVv/bF9GKoSvOfs5W7q5zNPBUHGrpFK7ZEGoDCMInGLtINlJRts3eg222HWT5zPL9AECjPr3RUThRoBs0WjaMu7KUGsxHAQD6r8vKJ2j2mY+di6E9uPHetXqxjUAXfqZVr3+bnqJm6Hpm/CKEbd6DK480rQh/kLGgihgarQw36QFmQoV/KDP8XstxpNFPDtRL429ZnnWX/zlQhKDo0WUAKu2ZcJrMHgCwqOIyOKbJvPep55ulwMh6w0QM0a7KmLOhAYBbOmES8R9MvvPshQgT96NaqmpuUz15iTMKKi51/v+1JXfPRCyR2TUm7oPBQYfzTmP7YZ3HVCfq5Uhhc24FYVEUUK9CQl4FHHCfnsxrLLPK6w3QTY6MO8kgaPtvVS7jjMQi1VKZFf1KVXBs/wIwpEyPIGYJA9MdS4KxYv0NIJ66jFoAycshH/keO+v0j6pyQENsRYvLxhLJBO9JFoLhEiHkISptOEODQ9uyNuHrMmtrn W86NiuWr NE81IOebAVMq2oyw/l0wExiMXUGXbwONFRlUWKA2bV1N35RAfzaAWBBNYsM2IB+REDcaEYJMo1IZubPvJPY8kC89TI74hCCB71oPv25cPDqdKRlrdJzzktBtWlWqGpbxn4TaLcnHPVAV1PMWFNFX/hx16oPCjyw45ybLqEQXqaIP4Q6g= 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_align() to better match what it actually does now and introduce macros for vrealloc() and friends 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 | 12 +++++++++--- mm/vmalloc.c | 19 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index fdc9aeb74a44..68791f7cb3ba 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -197,9 +197,15 @@ 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_align_noprof(const void *p, size_t size, + unsigned long align, gfp_t flags, int nid) __realloc_size(2); +#define vrealloc_node_noprof(_p, _s, _f, _nid) \ + vrealloc_node_align_noprof(_p, _s, 1, _f, _nid) +#define vrealloc_noprof(_p, _s, _f) \ + vrealloc_node_align_noprof(_p, _s, 1, _f, NUMA_NO_NODE) +#define vrealloc_node_align(...) alloc_hooks(vrealloc_node_align_noprof(__VA_ARGS__)) +#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 6dbcdceecae1..776c68f84ce2 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -4089,12 +4089,15 @@ void *vzalloc_node_noprof(unsigned long size, int node) EXPORT_SYMBOL(vzalloc_node_noprof); /** - * vrealloc - reallocate virtually contiguous memory; contents remain unchanged + * vrealloc_node_align_noprof - 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 + * If @p is %NULL, vrealloc_XXX() behaves exactly like vmalloc(). If @size is 0 and * @p is not a %NULL pointer, the object pointed to is freed. * * If __GFP_ZERO logic is requested, callers must ensure that, starting with the @@ -4111,7 +4114,8 @@ 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_align_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; @@ -4135,6 +4139,11 @@ 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(!IS_ALIGNED((unsigned long)p, align), + "will not reallocate with a bigger alignment (0x%lx)\n", align)) + return NULL; + if (nid != NUMA_NO_NODE && nid != page_to_nid(vmalloc_to_page(p))) + goto need_realloc; } /* @@ -4165,8 +4174,10 @@ void *vrealloc_noprof(const void *p, size_t size, gfp_t flags) return (void *)p; } +need_realloc: /* 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