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 4BB96EB64D9 for ; Mon, 19 Jun 2023 09:19:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8D96F8D0002; Mon, 19 Jun 2023 05:19:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 888CC8D0001; Mon, 19 Jun 2023 05:19:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 779468D0002; Mon, 19 Jun 2023 05:19:09 -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 66AA68D0001 for ; Mon, 19 Jun 2023 05:19:09 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 2EFCEAFE4D for ; Mon, 19 Jun 2023 09:19:09 +0000 (UTC) X-FDA: 80918948418.25.E19CF1B Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf25.hostedemail.com (Postfix) with ESMTP id 8785EA000F for ; Mon, 19 Jun 2023 09:19:06 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of mark.rutland@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=mark.rutland@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687166346; 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; bh=dRCO0t2N2FpSJZyw9v3UZz248rKf5deSA5g97VI74o8=; b=WP5SY++2hVUFoEfV53zzmgxyQYFWh6hjdDMF5tuS8zi/TwhqR88XqLRtaUNTziWFBm4qmj KJIh0eS0Ljfox9Nj+hQ94qS9zzgscv6Wr50XDkPzmRcPQdePWGLqm0R4tkEiFXKp07uYkU oXXVnyE3hEjNHIJ9u6u1ACmN2z0U98M= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687166346; a=rsa-sha256; cv=none; b=8adrS2XHFle9eMH6vbxqQIXndgm7bGpODsNZ7iscBYPkjJiS5QXKIe3iRq/XSVvgcMyEh4 xbMe04eSx6wdfmkOGm2xgi72/quZYR3xOUTOYg/5ulDWusDYiYjKqa5CCxchDl72g5Vnls bhSfMpQr2hfW5YX4N1QWp6N7o1LqbSA= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of mark.rutland@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=mark.rutland@arm.com; dmarc=pass (policy=none) header.from=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 279F612FC; Mon, 19 Jun 2023 02:19:49 -0700 (PDT) Received: from FVFF77S0Q05N (unknown [10.57.28.22]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8B0053F64C; Mon, 19 Jun 2023 02:19:03 -0700 (PDT) Date: Mon, 19 Jun 2023 10:19:00 +0100 From: Mark Rutland To: Kent Overstreet Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-bcachefs@vger.kernel.org, Kent Overstreet , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , linux-mm@kvack.org, Kees Cook , Andy Lutomirski Subject: Re: [PATCH 07/32] mm: Bring back vmalloc_exec Message-ID: References: <20230509165657.1735798-1-kent.overstreet@linux.dev> <20230509165657.1735798-8-kent.overstreet@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230509165657.1735798-8-kent.overstreet@linux.dev> X-Stat-Signature: r797ep116agheu9n1f1cexpiihxg654f X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 8785EA000F X-Rspam-User: X-HE-Tag: 1687166346-489977 X-HE-Meta: U2FsdGVkX1/04CF0esuK7ZHIZPQsLkneKZnW87F2r5WI3LvDmRKqqjXg94ULM5Ngijc7DUKRzSZBgCvCOlZWQz/nndGFkrSrvoO92Sy2AL0HMl/xoAsYzimoL3jzW8RKV358PBKpEHTLOEFaoBvJE0iJ1anto/Q8BPG3z7qRTQGynKrtrrzqWu6EJxdMESo7j8SPAt1ir41Y9B7DOaCsc9aC/msyzcP6jVNXdTjdcyokbk+V2xaZfN5F/hkI0oB4N/jSzKlzQED0md3oomz+SrHA5VvWiz5Oom+uhBX/fTQD7juJpTRczcW74pj68j/mmIt3scE2uDgMQJ7mQebxovWYYYxCG5UUa/xRKE70ZcTS46oNUAmI5jIQxCdkHko2bsvjsr7lGKGQ78wYjSKK7g4dOpxF6SjFDQOoMm6MQei6HSEUxj01uiss/fgun4G22BoWCpD55k5wgNMXfUqlebn85eh0Ps4Na8+8fYd6retVApEITDBLj5Y9PS6yF/VOm835Fm0oIHMhO/YbFKNXAg1UCfV9VQIQwlnFwmMA1l4NulG4Hu6An+B05oLOvrI25hE8nGXCxZvoz49mwFAI09wt4vthaKQm+Fd3AeCjDSZVtLq16WvlLYQ/fKit16+gQ/66NKJd9SrTcnX062TiJadD4AULyWQ7+9xCcwXWeEd3YNznSz0nOFCGDi542/rDo4HtkhUDNRFOuT1/qTixwtoT/XRj1twX4kS44KMaxQCkReD5TZ1Af4mH43yTD7ddSjKpoVb6HgnVqm80xs0yAasLEzjOlYZH5jHijBC66XrxMak9zGwv5VovQd2PaqB1TZnPzWeUBllnPCRZQpsH0ZP+qkKo1MWGQDeXlQuOkVFMv03q0ho1Ms04/VXmFyl0rq4oaghsp0M0bjSvrXljMJDvnphtF9C4AtL664HH3yn2JXX6Lpjx3ptVDzm2bI3GFNA7itj+LwOc0kt7efR 5QC/d+Kf d4doVAqe/TN+mm4uDwEB1H2GaKA1vlVU+AeacY1basOJAYaTK8PlqlmdtF9luNZ8CGdTeMi+Ote3lrKgie+XfoMwQm+Cfx3JNKwBjE6RtdtJ3Eb2MtDPz+aS6dsZ36aXuX44VZ0tLnsntQhY//pJZcitBRrHEMc83VkfC4MBz7EKHWOZ/16p3u3zCp+rUqtgMZeWqGiUiZz7gE43mypVByrVvgDyHNw4b9Y81bv4DKnOu8sxS6oLWlRYwiSzK0XxZ8fmzOqVM2+jI5RzoxgU27aV91rNXBH5pdCeNw1+TUfX53bx1yElC/Py63bOrS6SvtqRuWkgInIfdyIiKFb6b0YxAhRecYra7L0rSJTwzzwHqMv7AgckkrrEiGhXivrkMsyO6v2ocK0+SSWT6zIKQom1optcq5vjAdG+ROYvVjgdbU70= 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: On Tue, May 09, 2023 at 12:56:32PM -0400, Kent Overstreet wrote: > From: Kent Overstreet > > This is needed for bcachefs, which dynamically generates per-btree node > unpack functions. Much like Kees and Andy, I have concerns with adding new code generators to the kernel. Even ignoring the actual code generation, there are a bunch of subtle ordering/maintenance/synchronization concerns across architectures, and we already have a fair amount of pain with the existing cases. Can you share more detail on how you want to use this? >From a quick scan of your gitweb for the bcachefs-for-upstream branch I couldn't spot the relevant patches. Thanks, Mark. > > Signed-off-by: Kent Overstreet > Cc: Andrew Morton > Cc: Uladzislau Rezki > Cc: Christoph Hellwig > Cc: linux-mm@kvack.org > --- > include/linux/vmalloc.h | 1 + > kernel/module/main.c | 4 +--- > mm/nommu.c | 18 ++++++++++++++++++ > mm/vmalloc.c | 21 +++++++++++++++++++++ > 4 files changed, 41 insertions(+), 3 deletions(-) > > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h > index 69250efa03..ff147fe115 100644 > --- a/include/linux/vmalloc.h > +++ b/include/linux/vmalloc.h > @@ -145,6 +145,7 @@ extern void *vzalloc(unsigned long size) __alloc_size(1); > extern void *vmalloc_user(unsigned long size) __alloc_size(1); > extern void *vmalloc_node(unsigned long size, int node) __alloc_size(1); > extern void *vzalloc_node(unsigned long size, int node) __alloc_size(1); > +extern void *vmalloc_exec(unsigned long size, gfp_t gfp_mask) __alloc_size(1); > extern void *vmalloc_32(unsigned long size) __alloc_size(1); > extern void *vmalloc_32_user(unsigned long size) __alloc_size(1); > extern void *__vmalloc(unsigned long size, gfp_t gfp_mask) __alloc_size(1); > diff --git a/kernel/module/main.c b/kernel/module/main.c > index d3be89de70..9eaa89e84c 100644 > --- a/kernel/module/main.c > +++ b/kernel/module/main.c > @@ -1607,9 +1607,7 @@ static void dynamic_debug_remove(struct module *mod, struct _ddebug_info *dyndbg > > void * __weak module_alloc(unsigned long size) > { > - return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, > - GFP_KERNEL, PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS, > - NUMA_NO_NODE, __builtin_return_address(0)); > + return vmalloc_exec(size, GFP_KERNEL); > } > > bool __weak module_init_section(const char *name) > diff --git a/mm/nommu.c b/mm/nommu.c > index 57ba243c6a..8d9ab19e39 100644 > --- a/mm/nommu.c > +++ b/mm/nommu.c > @@ -280,6 +280,24 @@ void *vzalloc_node(unsigned long size, int node) > } > EXPORT_SYMBOL(vzalloc_node); > > +/** > + * vmalloc_exec - allocate virtually contiguous, executable memory > + * @size: allocation size > + * > + * Kernel-internal function to allocate enough pages to cover @size > + * the page level allocator and map them into contiguous and > + * executable kernel virtual space. > + * > + * For tight control over page level allocator and protection flags > + * use __vmalloc() instead. > + */ > + > +void *vmalloc_exec(unsigned long size, gfp_t gfp_mask) > +{ > + return __vmalloc(size, gfp_mask); > +} > +EXPORT_SYMBOL_GPL(vmalloc_exec); > + > /** > * vmalloc_32 - allocate virtually contiguous memory (32bit addressable) > * @size: allocation size > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 31ff782d36..2ebb9ea7f0 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3401,6 +3401,27 @@ void *vzalloc_node(unsigned long size, int node) > } > EXPORT_SYMBOL(vzalloc_node); > > +/** > + * vmalloc_exec - allocate virtually contiguous, executable memory > + * @size: allocation size > + * > + * Kernel-internal function to allocate enough pages to cover @size > + * the page level allocator and map them into contiguous and > + * executable kernel virtual space. > + * > + * For tight control over page level allocator and protection flags > + * use __vmalloc() instead. > + * > + * Return: pointer to the allocated memory or %NULL on error > + */ > +void *vmalloc_exec(unsigned long size, gfp_t gfp_mask) > +{ > + return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, > + gfp_mask, PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS, > + NUMA_NO_NODE, __builtin_return_address(0)); > +} > +EXPORT_SYMBOL_GPL(vmalloc_exec); > + > #if defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA32) > #define GFP_VMALLOC32 (GFP_DMA32 | GFP_KERNEL) > #elif defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA) > -- > 2.40.1 > >