X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=urcu-bp.c;h=ef1e68771ab9fafe8b67da4c98672f24edd43006;hb=c13c2e55160906ebe65756d8674558eda123912d;hp=f99c0e502ee20f197b5f225a2b6a49088d3b138a;hpb=52c75091b18f3cc398b765570a94aaa870afcd51;p=urcu.git diff --git a/urcu-bp.c b/urcu-bp.c index f99c0e5..ef1e687 100644 --- a/urcu-bp.c +++ b/urcu-bp.c @@ -109,13 +109,7 @@ unsigned int rcu_yield_active; DEFINE_URCU_TLS(unsigned int, rcu_rand_yield); #endif -/* - * Global grace period counter. - * Contains the current RCU_GP_CTR_PHASE. - * Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path. - * Written to only by writer with mutex taken. Read by both writer and readers. - */ -unsigned long rcu_gp_ctr = RCU_GP_COUNT; +struct rcu_gp rcu_gp = { .ctr = RCU_GP_COUNT }; /* * Pointer to registry elements. Written to only by each individual reader. Read @@ -174,7 +168,7 @@ static void wait_for_readers(struct cds_list_head *input_readers, /* * Wait for each thread URCU_TLS(rcu_reader).ctr to either * indicate quiescence (not nested), or observe the current - * rcu_gp_ctr value. + * rcu_gp.ctr value. */ for (;;) { wait_loops++; @@ -250,7 +244,7 @@ void synchronize_rcu(void) cmm_smp_mb(); /* Switch parity: 0 -> 1, 1 -> 0 */ - CMM_STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR_PHASE); + CMM_STORE_SHARED(rcu_gp.ctr, rcu_gp.ctr ^ RCU_GP_CTR_PHASE); /* * Must commit qparity update to memory before waiting for other parity @@ -301,6 +295,11 @@ void rcu_read_unlock(void) _rcu_read_unlock(); } +int rcu_read_ongoing(void) +{ + return _rcu_read_ongoing(); +} + /* * only grow for now. */