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 94F4AC7EE2A for ; Fri, 27 Jun 2025 21:25:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3904F6B00AF; Fri, 27 Jun 2025 17:25:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 367EB6B00B1; Fri, 27 Jun 2025 17:25:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A53F6B00B2; Fri, 27 Jun 2025 17:25:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1F3586B00AF for ; Fri, 27 Jun 2025 17:25:36 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9644F16035D for ; Fri, 27 Jun 2025 21:25:35 +0000 (UTC) X-FDA: 83602462230.10.E0F3602 Received: from mailrelay-egress12.pub.mailoutpod2-cph3.one.com (mailrelay-egress12.pub.mailoutpod2-cph3.one.com [46.30.211.187]) by imf05.hostedemail.com (Postfix) with ESMTP id CB14F10000D for ; Fri, 27 Jun 2025 21:25:33 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=F7V7LJBe; dkim=pass header.d=konsulko.se header.s=ed1 header.b=tYbqjutT ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751059534; 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=cg6Mb0y63NoDrvRbc/wKLzTLQZaf3be1Lhc8PUfhwzc=; b=KIY2RJ1cApd8RJN4fA0fveLYnIKWhuZnLkqFlakAk5GKTXq8XPvv82yYcNf+rdBlPi3/yJ V1CN7Fw0LPFV7l/4W4Npa6wnjMAJhXbhzlkiIKT71cClMg9Tj0lqvyZprAe6r2LpemF307 lxS74Gcse0LwWR707KDGx+pnpq1ex/A= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=konsulko.se header.s=rsa1 header.b=F7V7LJBe; dkim=pass header.d=konsulko.se header.s=ed1 header.b=tYbqjutT; spf=none (imf05.hostedemail.com: domain of vitaly.wool@konsulko.se has no SPF policy when checking 46.30.211.187) smtp.mailfrom=vitaly.wool@konsulko.se; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751059534; a=rsa-sha256; cv=none; b=SjNM6ZB4z5wEXEBuvfCZGH/BpKLC4sKc8jP5inhXR+CpL5mQRi7U/8W6/vrDqXZRbI8CDO E41RzewX1InpTlor5Sdl1fwXJrK6WitJHcd1mjpUDIswmx2f9li+0LfmAX/vmI1B3/JtuN TQMbOXO9f1R/VIwQEuf0sbA3Ji4A7Mc= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1751059532; x=1751664332; d=konsulko.se; s=rsa1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=cg6Mb0y63NoDrvRbc/wKLzTLQZaf3be1Lhc8PUfhwzc=; b=F7V7LJBer2os7JqY9zbFKT7iuSqRrBgnxewbwZw0TSIZsl0Kea8SxF2fmfzBk5wIImMLUdklKUHm3 4XvVIagjSZeMjKl305enZjXPv5a9KtO/aBJfZ9Uk1ysXeB/8uFhwrlfZKXma0CAMRRwpxH97iR6eaS PDUfLo2B3N5QH1OEkGqZuiughFMsY0dWi3vHd7RBhET5rc269rwUrmKYoB5gkt83uV5tEdp6k7xbmY goazUPWUMRH5YqgBr7WFK+P0OZXcfXIOL5cd42W8XB7gWWbGt781qZsUFQKDa3DLmgdsConllB3ByZ wYfI12bOesN0iGsdTU0ww8NKsCBLMGQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1751059532; x=1751664332; d=konsulko.se; s=ed1; h=content-transfer-encoding:mime-version:references:in-reply-to:message-id:date: subject:cc:to:from:from; bh=cg6Mb0y63NoDrvRbc/wKLzTLQZaf3be1Lhc8PUfhwzc=; b=tYbqjutTmaAQ0hzQx86gbBaLt9WfpoZui21Ut3vP2IQqfUiV+bA73RLzWb4vwjAxQ9/cwP5Sth/M5 l2IQAVgDA== X-HalOne-ID: 40323c6c-539d-11f0-a66f-85eb291bc831 Received: from localhost.localdomain (host-90-238-19-233.mobileonline.telia.com [90.238.19.233]) by mailrelay5.pub.mailoutpod2-cph3.one.com (Halon) with ESMTPSA id 40323c6c-539d-11f0-a66f-85eb291bc831; Fri, 27 Jun 2025 21:25:32 +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 v7 1/4] mm/vmalloc: allow to set node and align in vrealloc Date: Fri, 27 Jun 2025 23:25:23 +0200 Message-Id: <20250627212523.2181687-1-vitaly.wool@konsulko.se> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250627212451.2181627-1-vitaly.wool@konsulko.se> References: <20250627212451.2181627-1-vitaly.wool@konsulko.se> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: CB14F10000D X-Stat-Signature: 5gsy3znc1y9dcybp716689e3yzakbjof X-HE-Tag: 1751059533-605789 X-HE-Meta: U2FsdGVkX1/RAa7LcFKNfQNqNI7tzL1j84B99v4jbasujvqTXES8lJKQWbXymEzGYZjVaFwAZv08f+MVOSvSmNYZpwumh15m+IhuLkgk/psHyB/7woyrOIytt6wS3/6EMXku0ZWc86bwFk2/JXXjShMZraztN3sWqn5XryUVoLTBMeSe7p4dhQqTMb9DQER3m66Xm1egVLuZ9hOA/QklQ92j4XGnKGt5/F5WqL3BnnItofbcZDvQ3RA0cP27eYKzgLIvvBaC52huRcB7MM3J29oVP3AN/L0l9ugbpF64n+qUqwX5dNUVzieMIcnvCnKowjNA3di4Q5H9oHLLdFO5Dr/7yPeZABS1lLKD/Hq4SuHaEFGvHmXz2Og/qlMRJLVBVHXnAK89D+lmUXNUZAciUvVBin+kVC6JHKfBMYeg88qBe0ofNWxSSHqU888WZidUAwhEBkh8iI7ioUWBSENNH+0cCb+u4AmWphwrJhUjJ6ezKHG1hFIfPzk9Z6dPzPiMGdJGbmL20STuBfX5JUIGN+Ny13+KLcHREq0ZS0PNOMsIs582RsLoYiHkeL7WPVp3EwbRExlPqEYOIk3UOpsOAWd2wr5M4fVqCoVRIiQIab8AfHmVoPHkJkrPk05StjW9p2cxFUBsCg5uufZpkzcyRbrvo/jNYbJ4lD0EKFe6Xg0/cdbEYSgGiMvUJqQXG0+ZoobXQi/dW1cEk7vb5xO5BUcKgKAD3ULcfKdy0qS0FIY0ofFc4aRCBsFv6Yz0PAmQcsQB8udPIkjvkniIjpF1iES198a0vGJI0JW5WxA+iY/bLn6whFxj6Cy3uiL0Y4xyQMS1O+MR7/0YzKo1BIaft0PCM+oY4uypML+8g85ZrnExQ5JI+W1t9GHYRpFVogzaG4GzqDoHecVhDcD1fTli1H/9nwO2F7CKngLtQBuRJJ9eKYusOGwzSjL6Ob0l3Djwhwtb14B0HVJ4Jfk3dKm BjxJ6D+B RNPNaSQdMjk7SNkR09YYqvdW1JEvStni7IRNwk/oqJVzWCvNRKDDf03bBAsFIHd1bwu60pKgl82liYv3jKF78HBAY7g1kBLcYImXbc+L+stP3aJ0nY7VHVsZ/6FF6D7XhJbqkNrLJhDmBvDf8UJtAlURB4Rd9cGsU8Hm4eLJ155C7k5I= 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 | 20 ++++++++++++++++---- 2 files changed, 25 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..d633ac0ff977 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,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; } /* @@ -4166,7 +4177,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