Re: [PATCH v2] rcu/nocb: Handle concurrent nocb kthreads creation

From: Neeraj Upadhyay
Date: Mon Dec 13 2021 - 03:55:41 EST


Hi David,

Thanks for the review; some replies inline.

On 12/13/2021 1:48 PM, David Woodhouse wrote:
On Sat, 2021-12-11 at 22:31 +0530, Neeraj Upadhyay wrote:
When multiple CPUs in the same nocb gp/cb group concurrently
come online, they might try to concurrently create the same
rcuog kthread. Fix this by using nocb gp CPU's spawn mutex to
provide mutual exclusion for the rcuog kthread creation code.

Signed-off-by: Neeraj Upadhyay <quic_neeraju@xxxxxxxxxxx>
---
Change in v2:
Fix missing mutex_unlock in nocb gp kthread creation err path.

I think this ends up being not strictly necessary in the short term too
because we aren't currently planning to run rcutree_prepare_cpu()
concurrently anyway. But harmless and worth fixing in the longer term.

Although, if I've already added a mutex for adding the boost thread,
could we manage to use the *same* mutex instead of adding another one?


Let me think about it; the nocb-gp and nocb-cb kthreads are grouped based on rcu_nocb_gp_stride; whereas, boost kthreads are per rnp. So, I need to see how we can use a common mutex for both.


Acked-by: David Woodhouse <dwmw@xxxxxxxxxxxx>
+ mutex_unlock(&rdp_gp->nocb_gp_kthread_mutex);
return;
+ }
WRITE_ONCE(rdp_gp->nocb_gp_kthread, t);
}
+ mutex_unlock(&rdp_gp->nocb_gp_kthread_mutex);

/* Spawn the kthread for this CPU. */

Some whitespace damage there.

Will fix in next version.

Thanks
Neeraj