Hi list, I was reading rcu_nest.h and the code snippet (lines 59 - 63), which I believe is to detect the overflow of variable rcu_gp_ctr, confused me a lot. Can some of you shed light on that? Specifically, what's the goal of line 60? Why should we compare the value of (rcu_gp_ctr - tmp) against "111 1111 0000 0000"? If I understand correctly, line 60 is to detect the scenario where rcu_gp_ctr has wrapped around and is currently smaller than variable tmp. If that is correct, should line 60 be the following? 60 ((tmp - READ_ONCE(rcu_gp_ctr)) > RCU_GP_CTR_BOTTOM_BIT) { Or did I misunderstand anything here? 40 static void rcu_read_lock(void) 41 { 42 long tmp; 43 long *rrgp; 44 45 /* 46 * If this is the outermost RCU read-side critical section, 47 * copy the global grace-period counter. In either case, 48 * increment the nesting count held in the low-order bits. 49 */ 50 51 rrgp = &__get_thread_var(rcu_reader_gp); 52 retry: 53 tmp = *rrgp; 54 if ((tmp & RCU_GP_CTR_NEST_MASK) == 0) 55 tmp = READ_ONCE(rcu_gp_ctr); 56 tmp++; 57 *rrgp = tmp; 58 smp_mb(); 59 if (((tmp & RCU_GP_CTR_NEST_MASK) == 1) && 60 ((rcu_gp_ctr - tmp) > (RCU_GP_CTR_NEST_MASK << 8)) != 0) { 61 (*rrgp)--; 62 goto retry; 63 } 64 } Thanks, --Junchang