On Fri, Oct 27, 2017 at 02:23:07PM +0530, Neeraj Upadhyay wrote: > Hi, > > One query regarding srcu_funnel_exp_start() function in > kernel/rcu/srcutree.c. > > static void srcu_funnel_exp_start(struct srcu_struct *sp, struct > srcu_node *snp, > unsigned long s) > { > <snip> > if (!ULONG_CMP_LT(sp->srcu_gp_seq_needed_exp, s)) > sp->srcu_gp_seq_needed_exp = s; > <snip> > } > > Why is sp->srcu_gp_seq_needed_exp set to 's' if srcu_gp_seq_needed_exp is >= > 's'. Shouldn't srcu_gp_seq_needed_exp be equal to the greater of both?
Let's suppose that it is incorrect as currently written. Can you construct a test case demonstrating a failure of some sort, then provide a fix? To start with, if it is currently incorrect, what would be the nature of the failure? Thanx, Paul