All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Kent Overstreet <kent.overstreet@linux.dev>
To: Mike Rapoport <rppt@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Björn Töpel" <bjorn@kernel.org>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"David S. Miller" <davem@davemloft.net>,
	"Dinh Nguyen" <dinguyen@kernel.org>,
	"Donald Dutile" <ddutile@redhat.com>,
	"Eric Chanudet" <echanude@redhat.com>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Helge Deller" <deller@gmx.de>,
	"Huacai Chen" <chenhuacai@kernel.org>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Nadav Amit" <nadav.amit@gmail.com>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Puranjay Mohan" <puranjay12@gmail.com>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Song Liu" <song@kernel.org>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Will Deacon" <will@kernel.org>,
	bpf@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-mm@kvack.org, linux-modules@vger.kernel.org,
	linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org,
	linux-s390@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
	netdev@vger.kernel.org, sparclinux@vger.kernel.org,
	x86@kernel.org
Subject: Re: [PATCH v4 00/15] mm: jit/text allocator
Date: Thu, 11 Apr 2024 14:00:23 -0400	[thread overview]
Message-ID: <v52bizaflxzrxqk2wtuek2m2juwbzr6jxnpzlvtswkarcaejow@kd7tygzbmijs> (raw)
In-Reply-To: <20240411160051.2093261-1-rppt@kernel.org>

On Thu, Apr 11, 2024 at 07:00:36PM +0300, Mike Rapoport wrote:
> From: "Mike Rapoport (IBM)" <rppt@kernel.org>
> 
> Hi,
> 
> Since v3 I looked into making execmem more of an utility toolbox, as we
> discussed at LPC with Mark Rutland, but it was getting more hairier than
> having a struct describing architecture constraints and a type identifying
> the consumer of execmem.
> 
> And I do think that having the description of architecture constraints for
> allocations of executable memory in a single place is better that having it
> spread all over the place.
> 
> The patches available via git:
> https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git/log/?h=execmem/v4
> 
> v4 changes:
> * rebase on v6.9-rc2
> * rename execmem_params to execmem_info and execmem_arch_params() to
>   execmem_arch_setup()
> * use single execmem_alloc() API instead of execmem_{text,data}_alloc() (Song)
> * avoid extra copy of execmem parameters (Rick)
> * run execmem_init() as core_initcall() except for the architectures that
>   may allocated text really early (currently only x86) (Will)
> * add acks for some of arm64 and riscv changes, thanks Will and Alexandre
> * new commits:
>   - drop call to kasan_alloc_module_shadow() on arm64 because it's not
>     needed anymore
>   - rename MODULE_START to MODULES_VADDR on MIPS
>   - use CONFIG_EXECMEM instead of CONFIG_MODULES on powerpc as per Christophe:
>     https://lore.kernel.org/all/79062fa3-3402-47b3-8920-9231ad05e964@csgroup.eu/
> 
> v3: https://lore.kernel.org/all/20230918072955.2507221-1-rppt@kernel.org
> * add type parameter to execmem allocation APIs
> * remove BPF dependency on modules
> 
> v2: https://lore.kernel.org/all/20230616085038.4121892-1-rppt@kernel.org
> * Separate "module" and "others" allocations with execmem_text_alloc()
> and jit_text_alloc()
> * Drop ROX entailment on x86
> * Add ack for nios2 changes, thanks Dinh Nguyen
> 
> v1: https://lore.kernel.org/all/20230601101257.530867-1-rppt@kernel.org
> 
> = Cover letter from v1 (sligtly updated) =
> 
> module_alloc() is used everywhere as a mean to allocate memory for code.
> 
> Beside being semantically wrong, this unnecessarily ties all subsystmes
> that need to allocate code, such as ftrace, kprobes and BPF to modules and
> puts the burden of code allocation to the modules code.
> 
> Several architectures override module_alloc() because of various
> constraints where the executable memory can be located and this causes
> additional obstacles for improvements of code allocation.
> 
> A centralized infrastructure for code allocation allows allocations of
> executable memory as ROX, and future optimizations such as caching large
> pages for better iTLB performance and providing sub-page allocations for
> users that only need small jit code snippets.
> 
> Rick Edgecombe proposed perm_alloc extension to vmalloc [1] and Song Liu
> proposed execmem_alloc [2], but both these approaches were targeting BPF
> allocations and lacked the ground work to abstract executable allocations
> and split them from the modules core.
> 
> Thomas Gleixner suggested to express module allocation restrictions and
> requirements as struct mod_alloc_type_params [3] that would define ranges,
> protections and other parameters for different types of allocations used by
> modules and following that suggestion Song separated allocations of
> different types in modules (commit ac3b43283923 ("module: replace
> module_layout with module_memory")) and posted "Type aware module
> allocator" set [4].
> 
> I liked the idea of parametrising code allocation requirements as a
> structure, but I believe the original proposal and Song's module allocator
> was too module centric, so I came up with these patches.
> 
> This set splits code allocation from modules by introducing execmem_alloc()
> and and execmem_free(), APIs, replaces call sites of module_alloc() and
> module_memfree() with the new APIs and implements core text and related
> allocations in a central place.
> 
> Instead of architecture specific overrides for module_alloc(), the
> architectures that require non-default behaviour for text allocation must
> fill execmem_info structure and implement execmem_arch_setup() that returns
> a pointer to that structure. If an architecture does not implement
> execmem_arch_setup(), the defaults compatible with the current
> modules::module_alloc() are used.
> 
> Since architectures define different restrictions on placement,
> permissions, alignment and other parameters for memory that can be used by
> different subsystems that allocate executable memory, execmem APIs
> take a type argument, that will be used to identify the calling subsystem
> and to allow architectures to define parameters for ranges suitable for that
> subsystem.
> 
> The new infrastructure allows decoupling of BPF, kprobes and ftrace from
> modules, and most importantly it paves the way for ROX allocations for
> executable memory.

It looks like you're just doing API cleanup first, then improving the
implementation later?

Patch set looks nice and clean; previous versions did seem to leak too
much arch/module details (or perhaps we were just bikeshedding too much
;) - but the API first approach is nice.

Looking forward to seeing this merged.

WARNING: multiple messages have this Message-ID (diff)
From: Kent Overstreet <kent.overstreet@linux.dev>
To: Mike Rapoport <rppt@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Björn Töpel" <bjorn@kernel.org>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"David S. Miller" <davem@davemloft.net>,
	"Dinh Nguyen" <dinguyen@kernel.org>,
	"Donald Dutile" <ddutile@redhat.com>,
	"Eric Chanudet" <echanude@redhat.com>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Helge Deller" <deller@gmx.de>,
	"Huacai Chen" <chenhuacai@kernel.org>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Nadav Amit" <nadav.amit@gmail.com>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Puranjay Mohan" <puranjay12@gmail.com>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Song Liu" <song@kernel.org>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Will Deacon" <will@kernel.org>,
	bpf@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-mm@kvack.org, linux-modules@vger.kernel.org,
	linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org,
	linux-s390@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
	netdev@vger.kernel.org, sparclinux@vger.kernel.org,
	x86@kernel.org
Subject: Re: [PATCH v4 00/15] mm: jit/text allocator
Date: Thu, 11 Apr 2024 14:00:23 -0400	[thread overview]
Message-ID: <v52bizaflxzrxqk2wtuek2m2juwbzr6jxnpzlvtswkarcaejow@kd7tygzbmijs> (raw)
In-Reply-To: <20240411160051.2093261-1-rppt@kernel.org>

On Thu, Apr 11, 2024 at 07:00:36PM +0300, Mike Rapoport wrote:
> From: "Mike Rapoport (IBM)" <rppt@kernel.org>
> 
> Hi,
> 
> Since v3 I looked into making execmem more of an utility toolbox, as we
> discussed at LPC with Mark Rutland, but it was getting more hairier than
> having a struct describing architecture constraints and a type identifying
> the consumer of execmem.
> 
> And I do think that having the description of architecture constraints for
> allocations of executable memory in a single place is better that having it
> spread all over the place.
> 
> The patches available via git:
> https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git/log/?h=execmem/v4
> 
> v4 changes:
> * rebase on v6.9-rc2
> * rename execmem_params to execmem_info and execmem_arch_params() to
>   execmem_arch_setup()
> * use single execmem_alloc() API instead of execmem_{text,data}_alloc() (Song)
> * avoid extra copy of execmem parameters (Rick)
> * run execmem_init() as core_initcall() except for the architectures that
>   may allocated text really early (currently only x86) (Will)
> * add acks for some of arm64 and riscv changes, thanks Will and Alexandre
> * new commits:
>   - drop call to kasan_alloc_module_shadow() on arm64 because it's not
>     needed anymore
>   - rename MODULE_START to MODULES_VADDR on MIPS
>   - use CONFIG_EXECMEM instead of CONFIG_MODULES on powerpc as per Christophe:
>     https://lore.kernel.org/all/79062fa3-3402-47b3-8920-9231ad05e964@csgroup.eu/
> 
> v3: https://lore.kernel.org/all/20230918072955.2507221-1-rppt@kernel.org
> * add type parameter to execmem allocation APIs
> * remove BPF dependency on modules
> 
> v2: https://lore.kernel.org/all/20230616085038.4121892-1-rppt@kernel.org
> * Separate "module" and "others" allocations with execmem_text_alloc()
> and jit_text_alloc()
> * Drop ROX entailment on x86
> * Add ack for nios2 changes, thanks Dinh Nguyen
> 
> v1: https://lore.kernel.org/all/20230601101257.530867-1-rppt@kernel.org
> 
> = Cover letter from v1 (sligtly updated) =
> 
> module_alloc() is used everywhere as a mean to allocate memory for code.
> 
> Beside being semantically wrong, this unnecessarily ties all subsystmes
> that need to allocate code, such as ftrace, kprobes and BPF to modules and
> puts the burden of code allocation to the modules code.
> 
> Several architectures override module_alloc() because of various
> constraints where the executable memory can be located and this causes
> additional obstacles for improvements of code allocation.
> 
> A centralized infrastructure for code allocation allows allocations of
> executable memory as ROX, and future optimizations such as caching large
> pages for better iTLB performance and providing sub-page allocations for
> users that only need small jit code snippets.
> 
> Rick Edgecombe proposed perm_alloc extension to vmalloc [1] and Song Liu
> proposed execmem_alloc [2], but both these approaches were targeting BPF
> allocations and lacked the ground work to abstract executable allocations
> and split them from the modules core.
> 
> Thomas Gleixner suggested to express module allocation restrictions and
> requirements as struct mod_alloc_type_params [3] that would define ranges,
> protections and other parameters for different types of allocations used by
> modules and following that suggestion Song separated allocations of
> different types in modules (commit ac3b43283923 ("module: replace
> module_layout with module_memory")) and posted "Type aware module
> allocator" set [4].
> 
> I liked the idea of parametrising code allocation requirements as a
> structure, but I believe the original proposal and Song's module allocator
> was too module centric, so I came up with these patches.
> 
> This set splits code allocation from modules by introducing execmem_alloc()
> and and execmem_free(), APIs, replaces call sites of module_alloc() and
> module_memfree() with the new APIs and implements core text and related
> allocations in a central place.
> 
> Instead of architecture specific overrides for module_alloc(), the
> architectures that require non-default behaviour for text allocation must
> fill execmem_info structure and implement execmem_arch_setup() that returns
> a pointer to that structure. If an architecture does not implement
> execmem_arch_setup(), the defaults compatible with the current
> modules::module_alloc() are used.
> 
> Since architectures define different restrictions on placement,
> permissions, alignment and other parameters for memory that can be used by
> different subsystems that allocate executable memory, execmem APIs
> take a type argument, that will be used to identify the calling subsystem
> and to allow architectures to define parameters for ranges suitable for that
> subsystem.
> 
> The new infrastructure allows decoupling of BPF, kprobes and ftrace from
> modules, and most importantly it paves the way for ROX allocations for
> executable memory.

It looks like you're just doing API cleanup first, then improving the
implementation later?

Patch set looks nice and clean; previous versions did seem to leak too
much arch/module details (or perhaps we were just bikeshedding too much
;) - but the API first approach is nice.

Looking forward to seeing this merged.

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: Kent Overstreet <kent.overstreet@linux.dev>
To: Mike Rapoport <rppt@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Björn Töpel" <bjorn@kernel.org>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"David S. Miller" <davem@davemloft.net>,
	"Dinh Nguyen" <dinguyen@kernel.org>,
	"Donald Dutile" <ddutile@redhat.com>,
	"Eric Chanudet" <echanude@redhat.com>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Helge Deller" <deller@gmx.de>,
	"Huacai Chen" <chenhuacai@kernel.org>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Nadav Amit" <nadav.amit@gmail.com>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Puranjay Mohan" <puranjay12@gmail.com>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Song Liu" <song@kernel.org>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Will Deacon" <will@kernel.org>,
	bpf@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	linux-mm@kvack.org, linux-modules@vger.kernel.org,
	linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org,
	linux-s390@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
	netdev@vger.kernel.org, sparclinux@vger.kernel.org,
	x86@kernel.org
Subject: Re: [PATCH v4 00/15] mm: jit/text allocator
Date: Thu, 11 Apr 2024 14:00:23 -0400	[thread overview]
Message-ID: <v52bizaflxzrxqk2wtuek2m2juwbzr6jxnpzlvtswkarcaejow@kd7tygzbmijs> (raw)
In-Reply-To: <20240411160051.2093261-1-rppt@kernel.org>

On Thu, Apr 11, 2024 at 07:00:36PM +0300, Mike Rapoport wrote:
> From: "Mike Rapoport (IBM)" <rppt@kernel.org>
> 
> Hi,
> 
> Since v3 I looked into making execmem more of an utility toolbox, as we
> discussed at LPC with Mark Rutland, but it was getting more hairier than
> having a struct describing architecture constraints and a type identifying
> the consumer of execmem.
> 
> And I do think that having the description of architecture constraints for
> allocations of executable memory in a single place is better that having it
> spread all over the place.
> 
> The patches available via git:
> https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git/log/?h=execmem/v4
> 
> v4 changes:
> * rebase on v6.9-rc2
> * rename execmem_params to execmem_info and execmem_arch_params() to
>   execmem_arch_setup()
> * use single execmem_alloc() API instead of execmem_{text,data}_alloc() (Song)
> * avoid extra copy of execmem parameters (Rick)
> * run execmem_init() as core_initcall() except for the architectures that
>   may allocated text really early (currently only x86) (Will)
> * add acks for some of arm64 and riscv changes, thanks Will and Alexandre
> * new commits:
>   - drop call to kasan_alloc_module_shadow() on arm64 because it's not
>     needed anymore
>   - rename MODULE_START to MODULES_VADDR on MIPS
>   - use CONFIG_EXECMEM instead of CONFIG_MODULES on powerpc as per Christophe:
>     https://lore.kernel.org/all/79062fa3-3402-47b3-8920-9231ad05e964@csgroup.eu/
> 
> v3: https://lore.kernel.org/all/20230918072955.2507221-1-rppt@kernel.org
> * add type parameter to execmem allocation APIs
> * remove BPF dependency on modules
> 
> v2: https://lore.kernel.org/all/20230616085038.4121892-1-rppt@kernel.org
> * Separate "module" and "others" allocations with execmem_text_alloc()
> and jit_text_alloc()
> * Drop ROX entailment on x86
> * Add ack for nios2 changes, thanks Dinh Nguyen
> 
> v1: https://lore.kernel.org/all/20230601101257.530867-1-rppt@kernel.org
> 
> = Cover letter from v1 (sligtly updated) =
> 
> module_alloc() is used everywhere as a mean to allocate memory for code.
> 
> Beside being semantically wrong, this unnecessarily ties all subsystmes
> that need to allocate code, such as ftrace, kprobes and BPF to modules and
> puts the burden of code allocation to the modules code.
> 
> Several architectures override module_alloc() because of various
> constraints where the executable memory can be located and this causes
> additional obstacles for improvements of code allocation.
> 
> A centralized infrastructure for code allocation allows allocations of
> executable memory as ROX, and future optimizations such as caching large
> pages for better iTLB performance and providing sub-page allocations for
> users that only need small jit code snippets.
> 
> Rick Edgecombe proposed perm_alloc extension to vmalloc [1] and Song Liu
> proposed execmem_alloc [2], but both these approaches were targeting BPF
> allocations and lacked the ground work to abstract executable allocations
> and split them from the modules core.
> 
> Thomas Gleixner suggested to express module allocation restrictions and
> requirements as struct mod_alloc_type_params [3] that would define ranges,
> protections and other parameters for different types of allocations used by
> modules and following that suggestion Song separated allocations of
> different types in modules (commit ac3b43283923 ("module: replace
> module_layout with module_memory")) and posted "Type aware module
> allocator" set [4].
> 
> I liked the idea of parametrising code allocation requirements as a
> structure, but I believe the original proposal and Song's module allocator
> was too module centric, so I came up with these patches.
> 
> This set splits code allocation from modules by introducing execmem_alloc()
> and and execmem_free(), APIs, replaces call sites of module_alloc() and
> module_memfree() with the new APIs and implements core text and related
> allocations in a central place.
> 
> Instead of architecture specific overrides for module_alloc(), the
> architectures that require non-default behaviour for text allocation must
> fill execmem_info structure and implement execmem_arch_setup() that returns
> a pointer to that structure. If an architecture does not implement
> execmem_arch_setup(), the defaults compatible with the current
> modules::module_alloc() are used.
> 
> Since architectures define different restrictions on placement,
> permissions, alignment and other parameters for memory that can be used by
> different subsystems that allocate executable memory, execmem APIs
> take a type argument, that will be used to identify the calling subsystem
> and to allow architectures to define parameters for ranges suitable for that
> subsystem.
> 
> The new infrastructure allows decoupling of BPF, kprobes and ftrace from
> modules, and most importantly it paves the way for ROX allocations for
> executable memory.

It looks like you're just doing API cleanup first, then improving the
implementation later?

Patch set looks nice and clean; previous versions did seem to leak too
much arch/module details (or perhaps we were just bikeshedding too much
;) - but the API first approach is nice.

Looking forward to seeing this merged.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Kent Overstreet <kent.overstreet@linux.dev>
To: Mike Rapoport <rppt@kernel.org>
Cc: "Mark Rutland" <mark.rutland@arm.com>,
	x86@kernel.org, "Catalin Marinas" <catalin.marinas@arm.com>,
	linux-mips@vger.kernel.org, "Song Liu" <song@kernel.org>,
	"Donald Dutile" <ddutile@redhat.com>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
	"Nadav Amit" <nadav.amit@gmail.com>,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	"Helge Deller" <deller@gmx.de>,
	"Huacai Chen" <chenhuacai@kernel.org>,
	"Russell King" <linux@armlinux.org.uk>,
	linux-trace-kernel@vger.kernel.org,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>,
	"Will Deacon" <will@kernel.org>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	loongarch@lists.linux.dev, "Thomas Gleixner" <tglx@linutronix.de>,
	bpf@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	linux-parisc@vger.kernel.org,
	"Puranjay Mohan" <puranjay12@gmail.com>,
	linux-mm@kvack.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, "Dinh Nguyen" <dinguyen@kernel.org>,
	"Björn Töpel" <bjorn@kernel.org>,
	"Eric Chanudet" <echanude@redhat.com>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>,
	linux-modules@vger.kernel.org
Subject: Re: [PATCH v4 00/15] mm: jit/text allocator
Date: Thu, 11 Apr 2024 14:00:23 -0400	[thread overview]
Message-ID: <v52bizaflxzrxqk2wtuek2m2juwbzr6jxnpzlvtswkarcaejow@kd7tygzbmijs> (raw)
In-Reply-To: <20240411160051.2093261-1-rppt@kernel.org>

On Thu, Apr 11, 2024 at 07:00:36PM +0300, Mike Rapoport wrote:
> From: "Mike Rapoport (IBM)" <rppt@kernel.org>
> 
> Hi,
> 
> Since v3 I looked into making execmem more of an utility toolbox, as we
> discussed at LPC with Mark Rutland, but it was getting more hairier than
> having a struct describing architecture constraints and a type identifying
> the consumer of execmem.
> 
> And I do think that having the description of architecture constraints for
> allocations of executable memory in a single place is better that having it
> spread all over the place.
> 
> The patches available via git:
> https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git/log/?h=execmem/v4
> 
> v4 changes:
> * rebase on v6.9-rc2
> * rename execmem_params to execmem_info and execmem_arch_params() to
>   execmem_arch_setup()
> * use single execmem_alloc() API instead of execmem_{text,data}_alloc() (Song)
> * avoid extra copy of execmem parameters (Rick)
> * run execmem_init() as core_initcall() except for the architectures that
>   may allocated text really early (currently only x86) (Will)
> * add acks for some of arm64 and riscv changes, thanks Will and Alexandre
> * new commits:
>   - drop call to kasan_alloc_module_shadow() on arm64 because it's not
>     needed anymore
>   - rename MODULE_START to MODULES_VADDR on MIPS
>   - use CONFIG_EXECMEM instead of CONFIG_MODULES on powerpc as per Christophe:
>     https://lore.kernel.org/all/79062fa3-3402-47b3-8920-9231ad05e964@csgroup.eu/
> 
> v3: https://lore.kernel.org/all/20230918072955.2507221-1-rppt@kernel.org
> * add type parameter to execmem allocation APIs
> * remove BPF dependency on modules
> 
> v2: https://lore.kernel.org/all/20230616085038.4121892-1-rppt@kernel.org
> * Separate "module" and "others" allocations with execmem_text_alloc()
> and jit_text_alloc()
> * Drop ROX entailment on x86
> * Add ack for nios2 changes, thanks Dinh Nguyen
> 
> v1: https://lore.kernel.org/all/20230601101257.530867-1-rppt@kernel.org
> 
> = Cover letter from v1 (sligtly updated) =
> 
> module_alloc() is used everywhere as a mean to allocate memory for code.
> 
> Beside being semantically wrong, this unnecessarily ties all subsystmes
> that need to allocate code, such as ftrace, kprobes and BPF to modules and
> puts the burden of code allocation to the modules code.
> 
> Several architectures override module_alloc() because of various
> constraints where the executable memory can be located and this causes
> additional obstacles for improvements of code allocation.
> 
> A centralized infrastructure for code allocation allows allocations of
> executable memory as ROX, and future optimizations such as caching large
> pages for better iTLB performance and providing sub-page allocations for
> users that only need small jit code snippets.
> 
> Rick Edgecombe proposed perm_alloc extension to vmalloc [1] and Song Liu
> proposed execmem_alloc [2], but both these approaches were targeting BPF
> allocations and lacked the ground work to abstract executable allocations
> and split them from the modules core.
> 
> Thomas Gleixner suggested to express module allocation restrictions and
> requirements as struct mod_alloc_type_params [3] that would define ranges,
> protections and other parameters for different types of allocations used by
> modules and following that suggestion Song separated allocations of
> different types in modules (commit ac3b43283923 ("module: replace
> module_layout with module_memory")) and posted "Type aware module
> allocator" set [4].
> 
> I liked the idea of parametrising code allocation requirements as a
> structure, but I believe the original proposal and Song's module allocator
> was too module centric, so I came up with these patches.
> 
> This set splits code allocation from modules by introducing execmem_alloc()
> and and execmem_free(), APIs, replaces call sites of module_alloc() and
> module_memfree() with the new APIs and implements core text and related
> allocations in a central place.
> 
> Instead of architecture specific overrides for module_alloc(), the
> architectures that require non-default behaviour for text allocation must
> fill execmem_info structure and implement execmem_arch_setup() that returns
> a pointer to that structure. If an architecture does not implement
> execmem_arch_setup(), the defaults compatible with the current
> modules::module_alloc() are used.
> 
> Since architectures define different restrictions on placement,
> permissions, alignment and other parameters for memory that can be used by
> different subsystems that allocate executable memory, execmem APIs
> take a type argument, that will be used to identify the calling subsystem
> and to allow architectures to define parameters for ranges suitable for that
> subsystem.
> 
> The new infrastructure allows decoupling of BPF, kprobes and ftrace from
> modules, and most importantly it paves the way for ROX allocations for
> executable memory.

It looks like you're just doing API cleanup first, then improving the
implementation later?

Patch set looks nice and clean; previous versions did seem to leak too
much arch/module details (or perhaps we were just bikeshedding too much
;) - but the API first approach is nice.

Looking forward to seeing this merged.

  parent reply	other threads:[~2024-04-11 18:00 UTC|newest]

Thread overview: 178+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-11 16:00 [PATCH v4 00/15] mm: jit/text allocator Mike Rapoport
2024-04-11 16:00 ` Mike Rapoport
2024-04-11 16:00 ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 01/15] arm64: module: remove uneeded call to kasan_alloc_module_shadow() Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 02/15] mips: module: rename MODULE_START to MODULES_VADDR Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 03/15] nios2: define virtual address space for modules Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 04/15] module: make module_memory_{alloc,free} more self-contained Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 05/15] mm: introduce execmem_alloc() and execmem_free() Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 19:42   ` Luis Chamberlain
2024-04-11 19:42     ` Luis Chamberlain
2024-04-11 19:42     ` Luis Chamberlain
2024-04-11 19:42     ` Luis Chamberlain
2024-04-14  6:53     ` Mike Rapoport
2024-04-14  6:53       ` Mike Rapoport
2024-04-14  6:53       ` Mike Rapoport
2024-04-14  6:53       ` Mike Rapoport
2024-04-12  9:16   ` Ingo Molnar
2024-04-12  9:16     ` Ingo Molnar
2024-04-12  9:16     ` Ingo Molnar
2024-04-12  9:16     ` Ingo Molnar
2024-04-14  6:54     ` Mike Rapoport
2024-04-14  6:54       ` Mike Rapoport
2024-04-14  6:54       ` Mike Rapoport
2024-04-14  6:54       ` Mike Rapoport
2024-04-15  7:52   ` Peter Zijlstra
2024-04-15  7:52     ` Peter Zijlstra
2024-04-15  7:52     ` Peter Zijlstra
2024-04-15  7:52     ` Peter Zijlstra
2024-04-15 16:51     ` Mike Rapoport
2024-04-15 16:51       ` Mike Rapoport
2024-04-15 16:51       ` Mike Rapoport
2024-04-15 16:51       ` Mike Rapoport
2024-04-15 17:36     ` Mark Rutland
2024-04-15 17:36       ` Mark Rutland
2024-04-15 17:36       ` Mark Rutland
2024-04-15 17:36       ` Mark Rutland
2024-04-16  7:22       ` Mike Rapoport
2024-04-16  7:22         ` Mike Rapoport
2024-04-16  7:22         ` Mike Rapoport
2024-04-17 23:32         ` Song Liu
2024-04-17 23:32           ` Song Liu
2024-04-17 23:32           ` Song Liu
2024-04-18 15:35           ` Mike Rapoport
2024-04-18 15:35             ` Mike Rapoport
2024-04-18 15:35             ` Mike Rapoport
2024-04-18 16:13             ` Song Liu
2024-04-18 16:13               ` Song Liu
2024-04-18 16:13               ` Song Liu
2024-04-18 17:52               ` Mike Rapoport
2024-04-18 17:52                 ` Mike Rapoport
2024-04-18 17:52                 ` Mike Rapoport
2024-04-18 21:01                 ` Song Liu
2024-04-18 21:01                   ` Song Liu
2024-04-18 21:01                   ` Song Liu
2024-04-19  6:55                   ` Mike Rapoport
2024-04-19  6:55                     ` Mike Rapoport
2024-04-19  6:55                     ` Mike Rapoport
2024-04-19 15:54                     ` Song Liu
2024-04-19 15:54                       ` Song Liu
2024-04-19 15:54                       ` Song Liu
2024-04-19 17:02                       ` Mike Rapoport
2024-04-19 17:02                         ` Mike Rapoport
2024-04-19 17:02                         ` Mike Rapoport
2024-04-19 17:32                         ` Song Liu
2024-04-19 17:32                           ` Song Liu
2024-04-19 17:32                           ` Song Liu
2024-04-19 19:59                           ` Mike Rapoport
2024-04-19 19:59                             ` Mike Rapoport
2024-04-19 19:59                             ` Mike Rapoport
2024-04-19 21:42                             ` Song Liu
2024-04-19 21:42                               ` Song Liu
2024-04-19 21:42                               ` Song Liu
2024-04-20  4:22                               ` Mike Rapoport
2024-04-20  4:22                                 ` Mike Rapoport
2024-04-20  4:22                                 ` Mike Rapoport
2024-04-20  9:11                                 ` Masami Hiramatsu
2024-04-20  9:11                                   ` Masami Hiramatsu
2024-04-20  9:11                                   ` Masami Hiramatsu
2024-04-20  9:11                                   ` Masami Hiramatsu
2024-04-22 18:32                                   ` Song Liu
2024-04-22 18:32                                     ` Song Liu
2024-04-22 18:32                                     ` Song Liu
2024-04-17 21:06   ` Masami Hiramatsu
2024-04-17 21:06     ` Masami Hiramatsu
2024-04-17 21:06     ` Masami Hiramatsu
2024-04-17 21:06     ` Masami Hiramatsu
2024-04-11 16:00 ` [PATCH v4 06/15] mm/execmem, arch: convert simple overrides of module_alloc to execmem Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 20:53   ` Sam Ravnborg
2024-04-11 20:53     ` Sam Ravnborg
2024-04-11 20:53     ` Sam Ravnborg
2024-04-11 20:53     ` Sam Ravnborg
2024-04-14  7:26     ` Mike Rapoport
2024-04-14  7:26       ` Mike Rapoport
2024-04-14  7:26       ` Mike Rapoport
2024-04-14  7:26       ` Mike Rapoport
2024-04-15  8:03   ` Peter Zijlstra
2024-04-15  8:03     ` Peter Zijlstra
2024-04-15  8:03     ` Peter Zijlstra
2024-04-15  8:03     ` Peter Zijlstra
2024-04-11 16:00 ` [PATCH v4 07/15] mm/execmem, arch: convert remaining " Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-15  9:36   ` Peter Zijlstra
2024-04-15  9:36     ` Peter Zijlstra
2024-04-15  9:36     ` Peter Zijlstra
2024-04-15  9:36     ` Peter Zijlstra
2024-04-11 16:00 ` [PATCH v4 08/15] arm64: extend execmem_info for generated code allocations Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 09/15] riscv: extend execmem_params " Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 10/15] powerpc: extend execmem_params for kprobes allocations Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 11/15] arch: make execmem setup available regardless of CONFIG_MODULES Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 12/15] x86/ftrace: enable dynamic ftrace without CONFIG_MODULES Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 13/15] powerpc: use CONFIG_EXECMEM instead of CONFIG_MODULES where appropiate Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 14/15] kprobes: remove dependency on CONFIG_MODULES Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-17 21:16   ` Masami Hiramatsu
2024-04-17 21:16     ` Masami Hiramatsu
2024-04-17 21:16     ` Masami Hiramatsu
2024-04-17 21:16     ` Masami Hiramatsu
2024-04-18 15:37     ` Mike Rapoport
2024-04-18 15:37       ` Mike Rapoport
2024-04-18 15:37       ` Mike Rapoport
2024-04-18 15:37       ` Mike Rapoport
2024-04-19 15:49     ` Mike Rapoport
2024-04-19 15:49       ` Mike Rapoport
2024-04-19 15:49       ` Mike Rapoport
2024-04-19 15:49       ` Mike Rapoport
2024-04-19 15:59       ` Christophe Leroy
2024-04-19 15:59         ` Christophe Leroy
2024-04-19 15:59         ` Christophe Leroy
2024-04-19 15:59         ` Christophe Leroy
2024-04-20  7:33         ` Mike Rapoport
2024-04-20  7:33           ` Mike Rapoport
2024-04-20  7:33           ` Mike Rapoport
2024-04-20  7:33           ` Mike Rapoport
2024-04-20  9:15           ` Masami Hiramatsu
2024-04-20  9:15             ` Masami Hiramatsu
2024-04-20  9:15             ` Masami Hiramatsu
2024-04-20  9:15             ` Masami Hiramatsu
2024-04-20 10:52             ` Mike Rapoport
2024-04-20 10:52               ` Mike Rapoport
2024-04-20 10:52               ` Mike Rapoport
2024-04-20 10:52               ` Mike Rapoport
2024-04-11 16:00 ` [PATCH v4 15/15] bpf: remove CONFIG_BPF_JIT dependency on CONFIG_MODULES of Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 16:00   ` Mike Rapoport
2024-04-11 18:00 ` Kent Overstreet [this message]
2024-04-11 18:00   ` [PATCH v4 00/15] mm: jit/text allocator Kent Overstreet
2024-04-11 18:00   ` Kent Overstreet
2024-04-11 18:00   ` Kent Overstreet
2024-04-11 19:45 ` Luis Chamberlain
2024-04-11 19:45   ` Luis Chamberlain
2024-04-11 19:45   ` Luis Chamberlain
2024-04-11 19:45   ` Luis Chamberlain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=v52bizaflxzrxqk2wtuek2m2juwbzr6jxnpzlvtswkarcaejow@kd7tygzbmijs \
    --to=kent.overstreet@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=alexghiti@rivosinc.com \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=chenhuacai@kernel.org \
    --cc=christophe.leroy@csgroup.eu \
    --cc=davem@davemloft.net \
    --cc=ddutile@redhat.com \
    --cc=deller@gmx.de \
    --cc=dinguyen@kernel.org \
    --cc=echanude@redhat.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=loongarch@lists.linux.dev \
    --cc=mark.rutland@arm.com \
    --cc=mcgrof@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=nadav.amit@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=palmer@dabbelt.com \
    --cc=puranjay12@gmail.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=song@kernel.org \
    --cc=sparclinux@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tsbogend@alpha.franken.de \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.