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 EAFC8C8302F for ; Tue, 1 Jul 2025 10:50:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 564BA6B00AB; Tue, 1 Jul 2025 06:50:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 53CA96B00AC; Tue, 1 Jul 2025 06:50:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4792C6B00AD; Tue, 1 Jul 2025 06:50:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 3645A6B00AB for ; Tue, 1 Jul 2025 06:50:27 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C36B01060EA for ; Tue, 1 Jul 2025 10:50:26 +0000 (UTC) X-FDA: 83615376852.26.057B122 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by imf16.hostedemail.com (Postfix) with ESMTP id B83C7180004 for ; Tue, 1 Jul 2025 10:50:24 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eQm19nq+; spf=pass (imf16.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.46 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751367024; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6nCukVMyBo3RqFnHOfcz0HJrttovy5ZOtQsinnvZ25E=; b=Qlp7PMMN5CmA6Xe9yQsmZ6or+2SOfCxKxH0getAjloBVPhmh7lFsRmj22heVgGOxJZKjTq 1acmFpfCGMbliIf4lcUCXPXH0ZFFfhdFAxSXf8H2UjbZe4VEvp4V3Rz0qmu6udt0dQDPU2 FiCN3UJPk9N0xxvb5o16g5vvuHXPRts= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eQm19nq+; spf=pass (imf16.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.46 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751367024; a=rsa-sha256; cv=none; b=H7etpsfIAlWv4i30CfGuLePuD9FlUnAxgf2RwSbvdPi3RtT4dOLy3ybPi5pB2g1TLNIfAI mrsO/zjMWEyl1VXWeZwcbb+m0z0Pq9sKl/wQ4vdgT+c0k0Q1QkUiianzX5bam1uUG2maj/ JkwZSBxMrmiB7QJNec5Qw1/x1PvI8Jg= Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-553b5165cf5so7370999e87.0 for ; Tue, 01 Jul 2025 03:50:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751367023; x=1751971823; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=6nCukVMyBo3RqFnHOfcz0HJrttovy5ZOtQsinnvZ25E=; b=eQm19nq+NNU4LtdDZFoPf/IhMi56W0h9C4p/0DCGFuT5MUOx4jK8IdeAR5YANL0LyX szieO3bARn2eOO7n7cPiFs6v1nbz7ksCpEvUTXyjAmb+/AeCXxHSp1jjujCFfOHE0RyW MNUc0xCfZS0FZa/PAwAG2ojAsDewVpA/d13y0/+MEvJ89FfU7LeQoJnbyAlpKSamkBg4 rQIaTi9y2JfNTJh0lnPHhDgMgUn9/R3lgh/nKE1nm0F78puHeE8PFKVspBFpeGDkH5GO 3UyzdECMvic1lY1h88W4DLEXZmYyAGKFE3qmMeJLi/tN+rBsCWM8n8VBrhZ4KjmQ7+0w efSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751367023; x=1751971823; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6nCukVMyBo3RqFnHOfcz0HJrttovy5ZOtQsinnvZ25E=; b=jaidvibrsAoeDNC8Jr88z2tSH1FgPz7bLu6sO4pHxSIydSdE6vkCV521P1dQSvmyRo ySgY0qLxIWBwta4kbkt10ndVxzE6joZ/CrhkqlXAtVo1mhTIFb6DH1LD6FGVoWewop// DYAGRhUfEUH6MSpkmCb2WCaQzKIG12c8oDZGW9CD3fN4zUcgydETre9kUsSufEP3SIJN ho3vr6WouRp4uOaromrAZk5w2qg2dMOVhdRaX48Se/rYqSqJPt8TGPlo8nel00uhrTSP yHX26fgQpQFlguG7YVuVyay6aCgndRJtnLnY672T5tiickgso1oXFXwdmVIm2POkTOtH xqDg== X-Gm-Message-State: AOJu0Yyc2UkEOwvkqt2I8hQw96J0+5ClMXi5tT9G1+olUAYA9RlMxUGG WfULHuRZjJ4yn+AQ5sIK/tIbMDd/Wd3cUKIybvAApMMyC2lN8+0RJUzQ X-Gm-Gg: ASbGncuBtBVd1ZslDK/P0E26Dszf0rwyJmJKBoH+HwTrKvltFN99VCS+bHXWvBQgBjv YRidkJwJrirZVZRUtOgzMxDk4P1W8tHzHmvMHBR8joIqsrLUG5nzzSyrio7wnAXkRLgaR4dsCZB 0pVDM18j/aI58mStWfSx1oxeLn2Cxg16MGRVr16tBUMzwFFBHbYDlZWZ3JRqZwqL9WOkfYDt0zC HbTaHZmahimsmCLg/9gMWYadnBRi5PcfjJAV3zgzrdW9lDIY44TbdqXfTv3dB/m0LMd31xKJRgb /11iZ6rxtxZ04moGsHmazkixIITe8Qcnf6xDK9O48A6doohcVtbOcPbPW95rTNO/OqgYXJwuJqa ckMPZrL1z0lM= X-Google-Smtp-Source: AGHT+IElki988gDWr2y8ghmyNq4FVP1tCS8rW7LXaS5acajXsEXL5t8ekDHYSztkNjljjTDBGKI6rw== X-Received: by 2002:a05:6512:ac5:b0:553:2c92:fdcb with SMTP id 2adb3069b0e04-5550b8699f2mr6857763e87.3.1751367022393; Tue, 01 Jul 2025 03:50:22 -0700 (PDT) Received: from pc636 (host-95-203-1-180.mobileonline.telia.com. [95.203.1.180]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5550b2d9e35sm1767155e87.216.2025.07.01.03.50.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Jul 2025 03:50:21 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Tue, 1 Jul 2025 12:50:19 +0200 To: Vitaly Wool Cc: linux-mm@kvack.org, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, Uladzislau Rezki , Danilo Krummrich , Alice Ryhl , rust-for-linux@vger.kernel.org Subject: Re: [PATCH v9 1/4] mm/vmalloc: allow to set node and align in vrealloc Message-ID: References: <20250630221511.3325123-1-vitaly.wool@konsulko.se> <20250630221615.3325221-1-vitaly.wool@konsulko.se> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250630221615.3325221-1-vitaly.wool@konsulko.se> X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: B83C7180004 X-Stat-Signature: 8mo6usji5isbm4xj896nwefsjp8kkmxe X-HE-Tag: 1751367024-118578 X-HE-Meta: U2FsdGVkX1/WCmQbed9SZdSoP5nw3XDX4mSfPhj/KwQSkUCGLeof98WNMpBxOq3XKD1/5pnjK6fGNFO5alnVlniZPjrdb3ERj1qeK0O3W8fXnzHzuQemNcMu7minuam4y+5QSxrqP/dz/BEzTSwTPRGu2GSyKR/Ov/i3oYheoSNVav/T09XJ4i4bpABqu4GhxLQhlgaLYD/KNsgbxmJDqlDfA2oRq7i8QnwfCSGBh4y83oU0JEr3jzrHIlGOZ02a1CgWD44OlSHirofKeR3HOJRoLuRSsJ7vEGrbz26aQ3uEoAm1BFR9qr8z/nVBhhShnWJneAjq9LZus3wXwyvYjxY7MB7tBiFYFfAMk4MAsWHBN7H+YvsY9z71D0Y9p6xLB/pNSm2na5goM3CfUTsxJ1cMsNLEy3k3cvYSOUJ5SAQ1MS1r7ScNSqaM8odHvkmdZ44vzp5Ci4dAXM4T2O9r8xrQWpv+ZgJ+D78mp7swhzQuqfgvrn0G42SeC3GOFWA0donQq6iEjSaNmqTNpBL5W5V7vfGh4qc6qLEQHSizUmPTZVYbgbewhzPuFkyNikpugPBz1NR+LJXa/PteaerI9Wj4fZKFtChf9lUSfm7FiVB+CtkRHJPsyHb4Va4asI6+JNYasa2FXy59RklDg7tCujWz25TdBLPZ2wyAT8jybOL79a8qErZNJ+6O+rUk8GH+Ka7Br/5C+8/hgT8/t23kLMOTSJhHSegYviD2LUv10aDFvSAtoGtXgFfKQJLiNVguBoy7tIeEDARYmzGJnXaBDFlGrIhleOnh15ujhTu32/d4eWt6+OmAGdkDNrdv+4BiA5tSwJwV8KqyBzalLD34FsC0CkHD4g1MxOjcur577503b1RuRy1EIAVyDOVPHIMr7dohwmamKTkKCT/6qJDQBC8VNJATVe4krgJyGO1ECl/U/e9aURLspc3TSo4/Nm99MLpTWsCl4TyUDh+lXLf 7R3u0N8m IycgFgYhqUCBIf6tsDPiw1O5+Z5TN67a5NdDFwEuajr2Ym7RJBbnVdePliSiqTEdjzKYaF5VITxlty6LlfviCNAyrvpjPYOhjacw72bIM+BU9kzuONzRLLACjtU+SApTUhf0yoAQT4Uq56Q206tPqhkyHdvFVYnT+F1+y0rOQ1beyti7Um7kdZBdq+AzyW9Rqn64pyjB+cEliPLsV19hiG4TsRY4u+jvtU7oE0V7ny7ARSK14qh4WQwK1G2BVv5NSGEMtQzYQs3uNt7ChmKUf1MJq4lDYw+ZLBPwE3Am1d1fdTNKHZlsJhVRtNJzWsIrLWBdWR8caU9RexybN38Mkh+WmBrnyNYnk/crJM95pPA626AYrCE9KBsJnXmASxFfgSVmT92s/ZGsA+6xab+BFGzBFWIZhDjHBHxafMlikh204PnaeKvuwl1eJ7gXlB+9NXXf8dleTq/x8gDjIkOtBM+N+Cg== 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 Tue, Jul 01, 2025 at 12:16:15AM +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_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; > By this goto change, you bypass the two important checks below. For example if you shrink the allocated size, you do not need to perform any allocations. Instead the patch goes and allocates a new area. You just need to remove: - if (nid != NUMA_NO_NODE && nid != page_to_nid(vmalloc_to_page(p))) - goto need_realloc; to make it working. -- Uladzislau Rezki