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.

Reply via email to