Revert "Use initial-exec tls model"
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 7 Nov 2017 14:35:37 +0000 (09:35 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 7 Nov 2017 14:35:37 +0000 (09:35 -0500)
This reverts commit 6fd172f599e8d798e68974a786dd930d876f182e.

The initial-exec model seems to behave differently than global-dynamic
with respect to lazy initialization, causing locks to be taken then
first time each thread touch the TLS. This introduces deadlocks
with library constructors waiting on other threads.

This will require further investigation.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/urcu/tls-compat.h
src/urcu-bp.c
src/urcu-call-rcu-impl.h
src/urcu-defer-impl.h
src/urcu-qsbr.c
src/urcu.c

index 3a31eeb619bec3bee3fa034c45b3faf8f7dd1a32..8ac1ea0615ddc2eb91ee51e9e15b89bd094d4c81 100644 (file)
@@ -72,9 +72,6 @@ extern "C" {
 
 # define URCU_TLS(name)                (name)
 
-# define DEFINE_URCU_TLS_IE(type, name)        \
-       CONFIG_RCU_TLS __attribute__((tls_model("initial-exec"))) type name
-
 #else /* #ifndef CONFIG_RCU_TLS */
 
 /*
@@ -130,9 +127,6 @@ struct urcu_tls {
 # define DEFINE_URCU_TLS(type, name)                           \
        DEFINE_URCU_TLS_1(type, name)
 
-# define DEFINE_URCU_TLS_IE(type, name)                                \
-       DEFINE_URCU_TLS_1(type, name)
-
 # define URCU_TLS_1(name)      (*__tls_access_ ## name())
 
 # define URCU_TLS(name)                URCU_TLS_1(name)
index 675b5d6e8aea929e8b8a7a1e757c777292a89b4f..ebe96c57da9630d3e43168ee32fa96da95277bfa 100644 (file)
@@ -142,7 +142,7 @@ struct rcu_gp rcu_gp = { .ctr = RCU_GP_COUNT };
  * Pointer to registry elements. Written to only by each individual reader. Read
  * by both the reader and the writers.
  */
-DEFINE_URCU_TLS_IE(struct rcu_reader *, rcu_reader);
+DEFINE_URCU_TLS(struct rcu_reader *, rcu_reader);
 
 static CDS_LIST_HEAD(registry);
 
index 56fe943ac8d1ab8b9b5d260efca4d9e1ed8d7728..4562ba4704f067bda7960ef225de46aca7ed0f3b 100644 (file)
@@ -88,7 +88,7 @@ static CDS_LIST_HEAD(call_rcu_data_list);
 
 /* Link a thread using call_rcu() to its call_rcu thread. */
 
-static DEFINE_URCU_TLS_IE(struct call_rcu_data *, thread_call_rcu_data);
+static DEFINE_URCU_TLS(struct call_rcu_data *, thread_call_rcu_data);
 
 /*
  * Guard call_rcu thread creation and atfork handlers.
index b2e1b3cab6c72428c138e45fb800ebdedd0e0a53..f96553365ba4f51035f427798edd2ac4eb981f13 100644 (file)
@@ -126,7 +126,7 @@ static int32_t defer_thread_stop;
  * Written to only by each individual deferer. Read by both the deferer and
  * the reclamation tread.
  */
-static DEFINE_URCU_TLS_IE(struct defer_queue, defer_queue);
+static DEFINE_URCU_TLS(struct defer_queue, defer_queue);
 static CDS_LIST_HEAD(registry_defer);
 static pthread_t tid_defer;
 
index f343f0d836f642360b4b6f3e24dbae6358e1bbf4..e029ace86a383b22256e2bf6da61cdb0fa526e1c 100644 (file)
@@ -77,7 +77,7 @@ struct rcu_gp rcu_gp = { .ctr = RCU_GP_ONLINE };
  * Written to only by each individual reader. Read by both the reader and the
  * writers.
  */
-DEFINE_URCU_TLS_IE(struct rcu_reader, rcu_reader);
+DEFINE_URCU_TLS(struct rcu_reader, rcu_reader);
 
 static CDS_LIST_HEAD(registry);
 
index af8a2ce57f97b2f4d40247c0671c3c304ce0e7fe..a81b12913e92d86b8eea95203f8d9054de8dda52 100644 (file)
@@ -118,7 +118,7 @@ struct rcu_gp rcu_gp = { .ctr = RCU_GP_COUNT };
  * Written to only by each individual reader. Read by both the reader and the
  * writers.
  */
-DEFINE_URCU_TLS_IE(struct rcu_reader, rcu_reader);
+DEFINE_URCU_TLS(struct rcu_reader, rcu_reader);
 
 static CDS_LIST_HEAD(registry);
 
This page took 0.040013 seconds and 4 git commands to generate.