diff options
| author | Mike Rapoport (IBM) <[email protected]> | 2024-05-05 16:06:19 +0000 |
|---|---|---|
| committer | Luis Chamberlain <[email protected]> | 2024-05-14 07:31:43 +0000 |
| commit | f6bec26c0a7364d3506a3e12dab7c228ef32bd65 (patch) | |
| tree | 4686bc944b0452c523664ad70241e3f0a115d12b /mm/mm_init.c | |
| parent | mm: introduce execmem_alloc() and execmem_free() (diff) | |
| download | kernel-f6bec26c0a7364d3506a3e12dab7c228ef32bd65.tar.gz kernel-f6bec26c0a7364d3506a3e12dab7c228ef32bd65.zip | |
mm/execmem, arch: convert simple overrides of module_alloc to execmem
Several architectures override module_alloc() only to define address
range for code allocations different than VMALLOC address space.
Provide a generic implementation in execmem that uses the parameters for
address space ranges, required alignment and page protections provided
by architectures.
The architectures must fill execmem_info structure and implement
execmem_arch_setup() that returns a pointer to that structure. This way the
execmem initialization won't be called from every architecture, but rather
from a central place, namely a core_initcall() in execmem.
The execmem provides execmem_alloc() API that wraps __vmalloc_node_range()
with the parameters defined by the architectures. If an architecture does
not implement execmem_arch_setup(), execmem_alloc() will fall back to
module_alloc().
Signed-off-by: Mike Rapoport (IBM) <[email protected]>
Acked-by: Song Liu <[email protected]>
Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
Signed-off-by: Luis Chamberlain <[email protected]>
Diffstat (limited to 'mm/mm_init.c')
| -rw-r--r-- | mm/mm_init.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/mm/mm_init.c b/mm/mm_init.c index 549e76af8f82..b6a1fcf6e13a 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -27,6 +27,7 @@ #include <linux/swap.h> #include <linux/cma.h> #include <linux/crash_dump.h> +#include <linux/execmem.h> #include "internal.h" #include "slab.h" #include "shuffle.h" @@ -2793,4 +2794,5 @@ void __init mm_core_init(void) pti_init(); kmsan_init_runtime(); mm_cache_init(); + execmem_init(); } |
