On Thu, 7 May 2020 08:49:10 Paul E. McKenney wrote: > > > +static void rcu_mph_info(void *data) > > This pointer will always be &rcu_state, so why not ignore the pointer > and use "rcu_state" below? > Yes you're right. > RCU grace periods are inherently global, so I don't know of any way > for RCU to focus on a given NUMA node. All or nothing. Or is it feasible to expose certain RCU thing to VM, say, with which kswapd can kick grace period every time the kthreads think it's needed? That way the work to gauge memory pressure can be off RCU's shoulders. > But on the > other hand, speeding up RCU grace periods will also help specific > NUMA nodes, so I believe that it is all good. > > > +{ > > + struct rcu_state *state = data; > > + > > + WRITE_ONCE(state->mph_end, jiffies + HZ / 10); > > + smp_store_release(&state->mph, true); > > + rcu_force_quiescent_state(); > > +} > > + > > +static struct mph_subscriber rcu_mph_subscriber = { > > + .info = rcu_mph_info, > > + .data = &rcu_state, > > Then this ".data" entry can be omitted, correct? Yes :) Hillf