Commit af806027 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Dave Hansen

mm: Move mm_cachep initialization to mm_init()

In order to allow using mm_alloc() much earlier, move initializing
mm_cachep into mm_init().
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20221025201057.751153381@infradead.org
parent 97e3d26b
...@@ -65,6 +65,7 @@ extern void sched_dead(struct task_struct *p); ...@@ -65,6 +65,7 @@ extern void sched_dead(struct task_struct *p);
void __noreturn do_task_dead(void); void __noreturn do_task_dead(void);
void __noreturn make_task_dead(int signr); void __noreturn make_task_dead(int signr);
extern void mm_cache_init(void);
extern void proc_caches_init(void); extern void proc_caches_init(void);
extern void fork_init(void); extern void fork_init(void);
......
...@@ -860,6 +860,7 @@ static void __init mm_init(void) ...@@ -860,6 +860,7 @@ static void __init mm_init(void)
/* Should be run after espfix64 is set up. */ /* Should be run after espfix64 is set up. */
pti_init(); pti_init();
kmsan_init_runtime(); kmsan_init_runtime();
mm_cache_init();
} }
#ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET #ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET
......
...@@ -3015,10 +3015,27 @@ static void sighand_ctor(void *data) ...@@ -3015,10 +3015,27 @@ static void sighand_ctor(void *data)
init_waitqueue_head(&sighand->signalfd_wqh); init_waitqueue_head(&sighand->signalfd_wqh);
} }
void __init proc_caches_init(void) void __init mm_cache_init(void)
{ {
unsigned int mm_size; unsigned int mm_size;
/*
* The mm_cpumask is located at the end of mm_struct, and is
* dynamically sized based on the maximum CPU number this system
* can have, taking hotplug into account (nr_cpu_ids).
*/
mm_size = sizeof(struct mm_struct) + cpumask_size();
mm_cachep = kmem_cache_create_usercopy("mm_struct",
mm_size, ARCH_MIN_MMSTRUCT_ALIGN,
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
offsetof(struct mm_struct, saved_auxv),
sizeof_field(struct mm_struct, saved_auxv),
NULL);
}
void __init proc_caches_init(void)
{
sighand_cachep = kmem_cache_create("sighand_cache", sighand_cachep = kmem_cache_create("sighand_cache",
sizeof(struct sighand_struct), 0, sizeof(struct sighand_struct), 0,
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_TYPESAFE_BY_RCU| SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_TYPESAFE_BY_RCU|
...@@ -3036,19 +3053,6 @@ void __init proc_caches_init(void) ...@@ -3036,19 +3053,6 @@ void __init proc_caches_init(void)
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT, SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
NULL); NULL);
/*
* The mm_cpumask is located at the end of mm_struct, and is
* dynamically sized based on the maximum CPU number this system
* can have, taking hotplug into account (nr_cpu_ids).
*/
mm_size = sizeof(struct mm_struct) + cpumask_size();
mm_cachep = kmem_cache_create_usercopy("mm_struct",
mm_size, ARCH_MIN_MMSTRUCT_ALIGN,
SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
offsetof(struct mm_struct, saved_auxv),
sizeof_field(struct mm_struct, saved_auxv),
NULL);
vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT); vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT);
mmap_init(); mmap_init();
nsproxy_cache_init(); nsproxy_cache_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment