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 445C6C282EC for ; Fri, 14 Mar 2025 09:59:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AA0F280004; Fri, 14 Mar 2025 05:59:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 032C1280001; Fri, 14 Mar 2025 05:59:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DEE8C280004; Fri, 14 Mar 2025 05:59:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id BB730280001 for ; Fri, 14 Mar 2025 05:59:35 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id DF99F5636F for ; Fri, 14 Mar 2025 09:59:36 +0000 (UTC) X-FDA: 83219709552.03.1713D22 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by imf18.hostedemail.com (Postfix) with ESMTP id F34F01C0006 for ; Fri, 14 Mar 2025 09:59:34 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=linutronix.de header.s=2020 header.b="beB/NC+Z"; dkim=pass header.d=linutronix.de header.s=2020e header.b=lXnd1jSy; dmarc=pass (policy=none) header.from=linutronix.de; spf=pass (imf18.hostedemail.com: domain of bigeasy@linutronix.de designates 193.142.43.55 as permitted sender) smtp.mailfrom=bigeasy@linutronix.de ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741946375; a=rsa-sha256; cv=none; b=ZAW/nzqyxTrcXMQjvWKxVNnEAkcmma5Xt50IXeLdvjGFBnnyC593yhvqtRer+aalAp71vP BVL0u02z3C5qzf61TErjUtXNRGX8Y6nLvjKKRHU0MdlKrpD3qokqIilP+TvPXVmETD9L3C eKiJL6psGD8ZcHZKoWaK/+9N6ecgcvU= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=linutronix.de header.s=2020 header.b="beB/NC+Z"; dkim=pass header.d=linutronix.de header.s=2020e header.b=lXnd1jSy; dmarc=pass (policy=none) header.from=linutronix.de; spf=pass (imf18.hostedemail.com: domain of bigeasy@linutronix.de designates 193.142.43.55 as permitted sender) smtp.mailfrom=bigeasy@linutronix.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741946375; 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=3w0MmSw2EI1lWC8on8nI8XdOLasgjBRwmZM16KiFX9g=; b=yCtIE0PEPjJBs1yKh/6L6M5EMdM7qb/T9UrEbvoSo7lCCVGG8BlPUaloWn3cqRivYbb7QA DAHgwGt6vE2u1XJRpmgBrZqP2WaZ+eGf1F6ThEukcgS2UXDeO93bE+OOoa2PnROydfFJVI PIwfKr8xB44aAt0xWVpBPSqD68FgwSU= Date: Fri, 14 Mar 2025 10:59:31 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1741946372; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3w0MmSw2EI1lWC8on8nI8XdOLasgjBRwmZM16KiFX9g=; b=beB/NC+Zp0PqJM69Y3IBBHjSEPlFKMv75ENTddz3f8ysWJxLxQ6LpxZTB+7m2mXgEcYV2b kQmrNrm0Gm8yCPvEdLgvi7G8+cOQmVUOlUM2zWvdcfhPtVlhTvximG4FX3QokOPbEVbcz5 R3mQ67WeaGqHTPqt7jXsPaeP6xEf2XbiZYCSEZw8upr6mMGCXY4D99CUMHMZOr0uGLMBwb Hy9Pde/GT9PM2bJy+hEyPhyVIe/A4n3zKVIU5WU5dYzsr25bkw0PueMwhZUX1ly0YQFHi4 ySSBDHYlWX7vxeFJM2kDF9KuK3RuCOCetgAAXXWR2cUvRLVWIxLF+8uckpO15g== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1741946372; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3w0MmSw2EI1lWC8on8nI8XdOLasgjBRwmZM16KiFX9g=; b=lXnd1jSyfuLo9otMvLVHsBt1RUcyya5vhaKl4f0FmkNtP0JtBX6KdLo4V4GcdmWo7MjoC4 H+65ZbqEe/pWV3AA== From: Sebastian Andrzej Siewior To: Andrew Morton Cc: linux-kernel@vger.kernel.org, =?utf-8?B?QW5kcsOp?= Almeida , Darren Hart , Davidlohr Bueso , Ingo Molnar , Juri Lelli , Peter Zijlstra , Thomas Gleixner , Valentin Schneider , Waiman Long , Uladzislau Rezki , Christoph Hellwig , linux-mm@kvack.org, Christoph Hellwig Subject: Re: [PATCH v10 19/21] mm: Add vmalloc_huge_node() Message-ID: <20250314095931.825Pdmvi@linutronix.de> References: <20250312151634.2183278-1-bigeasy@linutronix.de> <20250312151634.2183278-20-bigeasy@linutronix.de> <20250312150206.54afabcf993bbc55f0066886@linux-foundation.org> <20250313075924.qulV64zL@linutronix.de> <20250313150814.075d1cd993a84005d4cd22c2@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20250313150814.075d1cd993a84005d4cd22c2@linux-foundation.org> X-Rspamd-Server: rspam07 X-Rspam-User: X-Stat-Signature: j7ztb6dr55675mqc5gg6cita6p15g99j X-Rspamd-Queue-Id: F34F01C0006 X-HE-Tag: 1741946374-191912 X-HE-Meta: U2FsdGVkX1+6ANlCQq7qceGmJaYhj0UC9Q2VC7ItWVDcBKx9fYHdqkq21C7tH9Ng8tn4lIhklFybosmmnZZap/iLgIEkU89o8OXfaKzNi9LB/9Bvm/hLOxTwt5M6LgTFeOleTHAe1pDcvQSl9aKJgK3d5cg5c/6rHosSWoJ4dRIOIfqPNu6XBtX2yU/dJvsd5uGzdI0Tu0EniH1o9Jg0VkpdypCx1skOXJfBXY+OtuSnMFb4e1IxAH/WpmS996Gn+qWyDRa6fAInNlOSbWtW8G535fa8lj5PK89LPHDlnSvEv4Z8gbr+T2eaEiyBA5p4cMoK73rg3HS3KMQyfOTpjOWVsskC3NfQXiTKJOekprKgYp2Df+NIlJNT1+8mXdKw1yeRQ7npS3QtRPerYLm1decdPpkdq+eaEYcXAkmhFRh9Vv8B2Css7nVdQeDHx/NQPn0k+xVT9sHDZzSsT6WuYhiZ/+VYsj+ccE97uyzXfJbO8eMlLldzyEIRE1BIq+n22/rEHG/Vm0T7Dqm59fbATZFAi663mo+24n9VC9AXbdHdPz3VzK+i6y9NLV8h/J8Egl3ug9HtKjL/VDcL9+WhGF2UZ/b8chbQpXXCThAvxqOqWr5SBu8dyO6H0IsWvRevPnDzes00vYU2yeGbL4zLxLDEk+XrYmBZAmrsOzN1j2121DCO7cHOu984NRusG3mtEvC590BWP7vJ72vcZHvfSZYcLyFF9o2IskeDcEWf1Oaa29IR7i2JRcKPWeHTdxtGJilpLl1i18VS3tZhyUY27XPqOGKV4//cPHDe+6Y+vyAXJkCSAbJB1LNOWd9l4k0sBknOhxEDCac0IG3Da8v3fGNmCt0wxcIAxCp9pnRbt2I8uA/n9G8eYxJ+K2ydU/DwMZcr4ncwCpTJIRiBWrpufwioQMT2chNIeFC5DeqYAQ/wTXYNCFzqJKRynh+14FYmInaSH6HS2nKE9I2Ooy3 S7ccnwRm nmcVMt1kv0xyBWQtpQw25PXrt0AJIL1gLVxH3wkiV4ENlEQvxCOtZD/4bSsb8Zl8EzmmRfZ95LDKtvyWHyshLFiLVezIvv3+p1jvp0BlkKrZ/LzVIt3eBPXOyawGb89yJaQaraf1U2MKY/uLmiYDG3n+i8U9unnlV9QbqhOKI2FiB1/6t3Hk3Vd9JuTYrLWzQ1UH5MSTRg+aip7IDEvw4IaF1y3/neUNEXS9z8JSlkkHfUxYNRySqsDyOARX5ayzNbBsMvitsd5tQGyRLb3FIWKPim0OL80DnMKcDYhJNLAwBAcDpO6bioIzXbG6425z5ZW+dK/EbTm21HmCxf89kkY05oH8ebxrlqUc5Ek5dweBBHcpgMbyObsezQwya6D6bpgRIGKJgRV8bi2spA87DRDnsYuIf1v2Ek3fU/jgU5wSxPa1v4prIEswxveIwywR1X3UH 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 2025-03-13 15:08:14 [-0700], Andrew Morton wrote: > That would be nice, if you think it makes sense. There is some > duplication here. As you wish. That would be the following patch below. This is now somehow unique compared to the other interfaces (like vmalloc() vs vmalloc_node()). -------------------->8------------- From: Peter Zijlstra Date: Fri, 14 Jul 2023 12:45:01 +0200 Subject: [PATCH] mm: Add vmalloc_huge_node() To enable node specific hash-tables using huge pages if possible. [bigeasy: use __vmalloc_node_range_noprof(), add nommu bits, inline vmalloc_huge] Cc: Andrew Morton Cc: Uladzislau Rezki Cc: Christoph Hellwig Cc: linux-mm@kvack.org Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Christoph Hellwig Signed-off-by: Sebastian Andrzej Siewior --- include/linux/vmalloc.h | 9 +++++++-- mm/nommu.c | 18 +++++++++++++++++- mm/vmalloc.c | 11 ++++++----- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 31e9ffd936e39..de95794777ad6 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -168,8 +168,13 @@ void *__vmalloc_node_noprof(unsigned long size, unsigned long align, gfp_t gfp_m int node, const void *caller) __alloc_size(1); #define __vmalloc_node(...) alloc_hooks(__vmalloc_node_noprof(__VA_ARGS__)) -void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __alloc_size(1); -#define vmalloc_huge(...) alloc_hooks(vmalloc_huge_noprof(__VA_ARGS__)) +void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node) __alloc_size(1); +#define vmalloc_huge_node(...) alloc_hooks(vmalloc_huge_node_noprof(__VA_ARGS__)) + +static inline void *vmalloc_huge(unsigned long size, gfp_t gfp_mask) +{ + return vmalloc_huge_node(size, gfp_mask, NUMA_NO_NODE); +} extern void *__vmalloc_array_noprof(size_t n, size_t size, gfp_t flags) __alloc_size(1, 2); #define __vmalloc_array(...) alloc_hooks(__vmalloc_array_noprof(__VA_ARGS__)) diff --git a/mm/nommu.c b/mm/nommu.c index baa79abdaf037..aed58ea7398db 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -207,7 +207,23 @@ void *vmalloc_noprof(unsigned long size) } EXPORT_SYMBOL(vmalloc_noprof); -void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) __weak __alias(__vmalloc_noprof); +/* + * vmalloc_huge_node - allocate virtually contiguous memory, on a node + * + * @size: allocation size + * @gfp_mask: flags for the page level allocator + * @node: node to use for allocation or NUMA_NO_NODE + * + * Allocate enough pages to cover @size from the page level + * allocator and map them into contiguous kernel virtual space. + * + * Due to NOMMU implications the node argument and HUGE page attribute is + * ignored. + */ +void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node) +{ + return __vmalloc_noprof(size, gfp_mask); +} /* * vzalloc - allocate virtually contiguous memory with zero fill diff --git a/mm/vmalloc.c b/mm/vmalloc.c index a6e7acebe9adf..0e2c49aaf84f1 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3947,9 +3947,10 @@ void *vmalloc_noprof(unsigned long size) EXPORT_SYMBOL(vmalloc_noprof); /** - * vmalloc_huge - allocate virtually contiguous memory, allow huge pages + * vmalloc_huge_node - allocate virtually contiguous memory, allow huge pages * @size: allocation size * @gfp_mask: flags for the page level allocator + * @node: node to use for allocation or NUMA_NO_NODE * * Allocate enough pages to cover @size from the page level * allocator and map them into contiguous kernel virtual space. @@ -3958,13 +3959,13 @@ EXPORT_SYMBOL(vmalloc_noprof); * * Return: pointer to the allocated memory or %NULL on error */ -void *vmalloc_huge_noprof(unsigned long size, gfp_t gfp_mask) +void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int node) { return __vmalloc_node_range_noprof(size, 1, VMALLOC_START, VMALLOC_END, - gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP, - NUMA_NO_NODE, __builtin_return_address(0)); + gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP, + node, __builtin_return_address(0)); } -EXPORT_SYMBOL_GPL(vmalloc_huge_noprof); +EXPORT_SYMBOL_GPL(vmalloc_huge_node_noprof); /** * vzalloc - allocate virtually contiguous memory with zero fill -- 2.47.2