synchronize_rcu go into offline mode during grace period. It duplicates
the rcu_thread_online/offline code, and therefore adding the required
wake_up_gp() is required there too.
Failure to do so leads to grace period hangs.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* our own quiescent state. This allows using synchronize_rcu()
* in threads registered as readers.
*/
- if (was_online)
+ if (was_online) {
CMM_STORE_SHARED(rcu_reader.ctr, 0);
+ cmm_smp_mb(); /* write rcu_reader.ctr before read futex */
+ wake_up_gp();
+ }
mutex_lock(&rcu_gp_lock);
* in threads registered as readers.
*/
cmm_smp_mb();
- if (was_online)
+ if (was_online) {
CMM_STORE_SHARED(rcu_reader.ctr, 0);
+ cmm_smp_mb(); /* write rcu_reader.ctr before read futex */
+ wake_up_gp();
+ }
mutex_lock(&rcu_gp_lock);
if (cds_list_empty(®istry))