#endif
#ifndef mark_rcu_quiescent_state
-#define mark_rcu_quiescent_state() do ; while (0)
+#define mark_rcu_quiescent_state() do {} while (0)
#endif /* #ifdef mark_rcu_quiescent_state */
#ifndef put_thread_offline
-#define put_thread_offline() do ; while (0)
-#define put_thread_online() do ; while (0)
-#define put_thread_online_delay() do ; while (0)
+#define put_thread_offline() do {} while (0)
+#define put_thread_online() do {} while (0)
+#define put_thread_online_delay() do {} while (0)
#else /* #ifndef put_thread_offline */
#define put_thread_online_delay() synchronize_rcu()
#endif /* #else #ifndef put_thread_offline */
* Performance test.
*/
+static
void *rcu_read_perf_test(void *arg)
{
int i;
return (NULL);
}
+static
void *rcu_update_perf_test(void *arg)
{
long long n_updates_local = 0;
return NULL;
}
+static
void perftestinit(void)
{
init_per_thread(n_reads_pt, 0LL);
uatomic_set(&nthreadsrunning, 0);
}
+static
int perftestrun(int nthreads, int nreaders, int nupdaters)
{
int t;
return 0;
}
+static
int perftest(int nreaders, int cpustride)
{
int i;
return perftestrun(i + 1, nreaders, 1);
}
+static
int rperftest(int nreaders, int cpustride)
{
int i;
return perftestrun(i, nreaders, 0);
}
+static
int uperftest(int nupdaters, int cpustride)
{
int i;
int garbage = 0;
+static
void *rcu_read_stress_test(void *arg)
{
int i;
static pthread_mutex_t call_rcu_test_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t call_rcu_test_cond = PTHREAD_COND_INITIALIZER;
+static
void rcu_update_stress_test_rcu(struct rcu_head *head)
{
int ret;
}
}
+static
void *rcu_update_stress_test(void *arg)
{
int i;
return NULL;
}
+static
void *rcu_fake_update_stress_test(void *arg)
{
if (callrcu_type == CALLRCU_PERTHREAD) {
return NULL;
}
+static
int stresstest(int nreaders)
{
int i;
* Mainprogram.
*/
+static
void usage(int argc, char *argv[])
{
diag("Usage: %s nreaders [ perf | rperf | uperf | stress ] [ stride ] [ callrcu_global | callrcu_percpu | callrcu_perthread ]\n", argv[0]);