On Fri, Nov 20, 2020 at 04:30:15PM +0800, Zhang,Qiang wrote: > Hello Pual > > sorry to disturb you, I also have some quesetion for you: > > in srcu_advance_state function, when seq state == SRCU_STATE_SCAN1, we will > check, if the previous readers critical region exits, will be returned > directly. > > I'd like to know under what scenario this will happen? Suppose that a reader gets preempted for a very long time in the middle of __srcu_read_lock(): int __srcu_read_lock(struct srcu_struct *ssp) { int idx; idx = READ_ONCE(ssp->srcu_idx) & 0x1; // PREEMPTED RIGHT HERE this_cpu_inc(ssp->sda->srcu_lock_count[idx]); smp_mb(); /* B */ /* Avoid leaking the critical section. */ return idx; } Suppose that several SRCU grace periods elapse during that preemption. Do you see how that can lead to your SRCU_STATE_SCAN1 early exit? Thanx, Paul PS: The paper below outlines a similar situation in userspace RCU, so feel free to use this paper as a hint. The paper is in two pieces, with the first piece in the first URL and the second in either of the last two URLs. @article{MathieuDesnoyers2012URCU, Author="Mathieu Desnoyers and Paul E. McKenney and Alan Stern and Michel R. Dagenais and Jonathan Walpole", Title="User-Level Implementations of Read-Copy Update", journal="IEEE Transactions on Parallel and Distributed Systems", volume={23}, year="2012", issn="1045-9219", pages="375-382", doi="10.1109/TPDS.2011.159", publisher="IEEE Computer Society", address="Los Alamitos, CA, USA", annotation={ RCU overview, desiderata, semi-formal semantics, user-level RCU usage scenarios, three classes of RCU implementation, wait-free RCU updates, RCU grace-period batching, update overhead, http://www.rdrop.com/users/paulmck/RCU/urcu-main-accepted.2011.08.30a.pdf http://www.rdrop.com/users/paulmck/RCU/urcu-supp-accepted.2011.08.30a.pdf http://www.computer.org/cms/Computer.org/dl/trans/td/2012/02/extras/ttd2012020375s.pdf }, }