diff options
| author | Aniket Gattani <aniketgattani@google.com> | 2026-05-04 00:22:04 +0300 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-05-05 13:50:48 +0300 |
| commit | a5959728548caf0aa17879342ee6571a29d54574 (patch) | |
| tree | e42a4a47995c7002b826a8db389beee5ae40ac28 | |
| parent | 89976cd73739dcb73745705a63ccc67a8be26cdf (diff) | |
| download | linux-a5959728548caf0aa17879342ee6571a29d54574.tar.xz | |
sched/membarrier: Modernize membarrier_global_expedited with cleanup guards
Replace explicit lock/unlock and free calls with scoped guards and
automatic cleanup constructs.
Signed-off-by: Aniket Gattani <aniketgattani@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260503212205.3714217-3-aniketgattani@google.com
| -rw-r--r-- | kernel/sched/membarrier.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/kernel/sched/membarrier.c b/kernel/sched/membarrier.c index 3d88e900a17f..12b68a77630a 100644 --- a/kernel/sched/membarrier.c +++ b/kernel/sched/membarrier.c @@ -267,23 +267,19 @@ void membarrier_update_current_mm(struct mm_struct *next_mm) static int membarrier_global_expedited(void) { + cpumask_var_t __free(free_cpumask_var) tmpmask = CPUMASK_VAR_NULL; int cpu; - cpumask_var_t tmpmask; if (num_online_cpus() == 1) return 0; - /* - * Matches memory barriers after rq->curr modification in - * scheduler. - */ - smp_mb(); /* system call entry is not a mb. */ - if (!zalloc_cpumask_var(&tmpmask, GFP_KERNEL)) return -ENOMEM; + guard(mb)(); SERIALIZE_IPI(); - cpus_read_lock(); + guard(cpus_read_lock)(); + rcu_read_lock(); for_each_online_cpu(cpu) { struct task_struct *p; @@ -319,15 +315,6 @@ static int membarrier_global_expedited(void) smp_call_function_many(tmpmask, ipi_mb, NULL, 1); preempt_enable(); - free_cpumask_var(tmpmask); - cpus_read_unlock(); - - /* - * Memory barrier on the caller thread _after_ we finished - * waiting for the last IPI. Matches memory barriers before - * rq->curr modification in scheduler. - */ - smp_mb(); /* exit from system call is not a mb */ return 0; } |
