projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ensure LOAD_SHARED/STORE_SHARED semantic is used in QSBR RCU
[urcu.git]
/
urcu-qsbr.c
diff --git
a/urcu-qsbr.c
b/urcu-qsbr.c
index ccecab4e7b02b63d80f6c87085486dee0a5452f5..e077eac8f2b4b4bc7c44cadaf0f96d012be60fe3 100644
(file)
--- a/
urcu-qsbr.c
+++ b/
urcu-qsbr.c
@@
-122,8
+122,7
@@
static void wait_for_quiescent_state(void)
*/
for (index = registry; index < registry + num_readers; index++) {
#ifndef HAS_INCOHERENT_CACHES
*/
for (index = registry; index < registry + num_readers; index++) {
#ifndef HAS_INCOHERENT_CACHES
- while (rcu_gp_ongoing(index->rcu_reader_qs_gp) &&
- (*index->rcu_reader_qs_gp - urcu_gp_ctr < 0))
+ while (rcu_gp_ongoing(index->rcu_reader_qs_gp))
cpu_relax();
#else /* #ifndef HAS_INCOHERENT_CACHES */
int wait_loops = 0;
cpu_relax();
#else /* #ifndef HAS_INCOHERENT_CACHES */
int wait_loops = 0;
@@
-131,8
+130,7
@@
static void wait_for_quiescent_state(void)
* BUSY-LOOP. Force the reader thread to commit its
* rcu_reader_qs_gp update to memory if we wait for too long.
*/
* BUSY-LOOP. Force the reader thread to commit its
* rcu_reader_qs_gp update to memory if we wait for too long.
*/
- while (rcu_gp_ongoing(index->rcu_reader_qs_gp) &&
- (*index->rcu_reader_qs_gp - urcu_gp_ctr < 0)) {
+ while (rcu_gp_ongoing(index->rcu_reader_qs_gp)) {
if (wait_loops++ == KICK_READER_LOOPS) {
force_mb_single_thread(index);
wait_loops = 0;
if (wait_loops++ == KICK_READER_LOOPS) {
force_mb_single_thread(index);
wait_loops = 0;
@@
-160,7
+158,7
@@
void synchronize_rcu(void)
internal_urcu_lock();
force_mb_all_threads();
internal_urcu_lock();
force_mb_all_threads();
-
urcu_gp_ctr += 2
;
+
STORE_SHARED(urcu_gp_ctr, urcu_gp_ctr + 2)
;
wait_for_quiescent_state();
force_mb_all_threads();
internal_urcu_unlock();
wait_for_quiescent_state();
force_mb_all_threads();
internal_urcu_unlock();
This page took
0.02304 seconds
and
4
git commands to generate.