Messages in this thread | | | Date | Mon, 9 Sep 2019 13:00:36 +0200 | From | Oleg Nesterov <> | Subject | Re: [RFC PATCH 4/4] Fix: sched/membarrier: p->mm->membarrier_state racy load (v2) |
| |
On 09/08, Mathieu Desnoyers wrote: > > +static void sync_runqueues_membarrier_state(struct mm_struct *mm) > +{ > + int membarrier_state = atomic_read(&mm->membarrier_state); > + bool fallback = false; > + cpumask_var_t tmpmask; > + int cpu; > + > + if (atomic_read(&mm->mm_users) == 1 || num_online_cpus() == 1) { > + WRITE_ONCE(this_rq()->membarrier_state, membarrier_state);
This doesn't look safe, this caller can migrate to another CPU after it calculates the per-cpu ptr.
I think you need do disable preemption or simply use this_cpu_write().
Oleg.
| |