diff options
author | Ingo Molnar <mingo@kernel.org> | 2025-09-16 08:24:22 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2025-09-16 08:24:22 +0200 |
commit | 85df1cd15ff5d775e88e23b9fc2a9f429fa5b504 (patch) | |
tree | a9988524f4a9dd1e0a5403ba8a99939b9c71af30 /kernel/futex/core.c | |
parent | 8d73829b78ca1a0e6eb93380f3bf5193d58c281c (diff) | |
parent | 7f830e126dc357fc086905ce9730140fd4528d66 (diff) |
Merge branch 'x86/urgent' into x86/apic, to resolve conflict
Conflicts:
arch/x86/include/asm/sev.h
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/futex/core.c')
-rw-r--r-- | kernel/futex/core.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/kernel/futex/core.c b/kernel/futex/core.c index d9bb5567af0c..125804fbb5cb 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -1722,12 +1722,9 @@ int futex_mm_init(struct mm_struct *mm) RCU_INIT_POINTER(mm->futex_phash, NULL); mm->futex_phash_new = NULL; /* futex-ref */ + mm->futex_ref = NULL; atomic_long_set(&mm->futex_atomic, 0); mm->futex_batches = get_state_synchronize_rcu(); - mm->futex_ref = alloc_percpu(unsigned int); - if (!mm->futex_ref) - return -ENOMEM; - this_cpu_inc(*mm->futex_ref); /* 0 -> 1 */ return 0; } @@ -1801,6 +1798,17 @@ static int futex_hash_allocate(unsigned int hash_slots, unsigned int flags) } } + if (!mm->futex_ref) { + /* + * This will always be allocated by the first thread and + * therefore requires no locking. + */ + mm->futex_ref = alloc_percpu(unsigned int); + if (!mm->futex_ref) + return -ENOMEM; + this_cpu_inc(*mm->futex_ref); /* 0 -> 1 */ + } + fph = kvzalloc(struct_size(fph, queues, hash_slots), GFP_KERNEL_ACCOUNT | __GFP_NOWARN); if (!fph) |