Le Thu, Sep 28, 2023 at 05:39:17PM -0400, Joel Fernandes a écrit : > If srcu_invoke_callbacks() was really called for the rdp, I would have > expected rcu_segcblist_advance() to advance all those pending > callbacks to 304. > > I posit that probably srcu_invoke_callbacks() is not even being called > in the first place, otherwise why is the DONE segment count still 0? > DONE should not be 0, otherwise callbacks will not run. The segcblist > of the rdp seems out of date perhaps due to rcu_invoke_callbacks() not > being called due to some other bug (or a workqueue/timer issue causing > the srcu_invoke_callbacks() to not run?). Speaking of, I'm looking at srcu_gp_end() and the comment after releasing srcu_gp_mutex says: "/* A new grace period can start at this point. But only one. */" But what ensures that? Because if we get preempted here and more than 3 grace periods elapse, then ->srcu_have_cbs[the_same_idx] could get overriden and then all sorts of race may lead to srcu_invoke_callbacks() to not be invoked. I'm not asking too loudly though because I'm sure I'm missing something obvious, I see a lot of mirages these days...