synchronize_srcu — wait for prior SRCU read-side critical-section completion
| void synchronize_srcu ( | struct srcu_struct * sp ); | 
   Wait for the count to drain to zero of both indexes. To avoid the
   possible starvation of synchronize_srcu, it waits for the count of
   the index=((->completed & 1) ^ 1) to drain to zero at first,
   and then flip the completed and wait for the count of the other index.
   
Can block; must be called from process context.
   Note that it is illegal to call synchronize_srcu from the corresponding
   SRCU read-side critical section; doing so will result in deadlock.
   However, it is perfectly legal to call synchronize_srcu on one
   srcu_struct from some other srcu_struct's read-side critical section,
   as long as the resulting graph of srcu_structs is acyclic.
   
   There are memory-ordering constraints implied by synchronize_srcu.
   On systems with more than one CPU, when synchronize_srcu returns,
   each CPU is guaranteed to have executed a full memory barrier since
   the end of its last corresponding SRCU-sched read-side critical section
   whose beginning preceded the call to synchronize_srcu.  In addition,
   each CPU having an SRCU read-side critical section that extends beyond
   the return from synchronize_srcu is guaranteed to have executed a
   full memory barrier after the beginning of synchronize_srcu and before
   the beginning of that SRCU read-side critical section.  Note that these
   guarantees include CPUs that are offline, idle, or executing in user mode,
   as well as CPUs that are executing in the kernel.
   
   Furthermore, if CPU A invoked synchronize_srcu, which returned
   to its caller on CPU B, then both CPU A and CPU B are guaranteed
   to have executed a full memory barrier during the execution of
   synchronize_srcu.  This guarantee applies even if CPU A and CPU B
   are the same CPU, but again only if the system has more than one CPU.
   
   Of course, these memory-ordering guarantees apply only when
   synchronize_srcu, srcu_read_lock, and srcu_read_unlock are
   passed the same srcu_struct structure.