Commit 5873b8a9 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcu-tasks: Refactor RCU-tasks to allow variants to be added



This commit splits out generic processing from RCU-tasks-specific
processing in order to allow additional flavors to be added.  It also
adds a def_bool TASKS_RCU_GENERIC to enable the common RCU-tasks
infrastructure code.

This is primarily, but not entirely, a code-movement commit.

Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 9cf8fc6f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ static inline void rcu_init_nohz(void) { }
 * Note a quasi-voluntary context switch for RCU-tasks's benefit.
 * This is a macro rather than an inline function to avoid #include hell.
 */
#ifdef CONFIG_TASKS_RCU
#ifdef CONFIG_TASKS_RCU_GENERIC
#define rcu_tasks_qs(t) \
	do { \
		if (READ_ONCE((t)->rcu_tasks_holdout)) \
@@ -140,14 +140,14 @@ void call_rcu_tasks(struct rcu_head *head, rcu_callback_t func);
void synchronize_rcu_tasks(void);
void exit_tasks_rcu_start(void);
void exit_tasks_rcu_finish(void);
#else /* #ifdef CONFIG_TASKS_RCU */
#else /* #ifdef CONFIG_TASKS_RCU_GENERIC */
#define rcu_tasks_qs(t)	do { } while (0)
#define rcu_note_voluntary_context_switch(t) do { } while (0)
#define call_rcu_tasks call_rcu
#define synchronize_rcu_tasks synchronize_rcu
static inline void exit_tasks_rcu_start(void) { }
static inline void exit_tasks_rcu_finish(void) { }
#endif /* #else #ifdef CONFIG_TASKS_RCU */
#endif /* #else #ifdef CONFIG_TASKS_RCU_GENERIC */

/**
 * cond_resched_tasks_rcu_qs - Report potential quiescent states to RCU
+8 −2
Original line number Diff line number Diff line
@@ -70,13 +70,19 @@ config TREE_SRCU
	help
	  This option selects the full-fledged version of SRCU.

config TASKS_RCU_GENERIC
	def_bool TASKS_RCU
	select SRCU
	help
	  This option enables generic infrastructure code supporting
	  task-based RCU implementations.  Not for manual selection.

config TASKS_RCU
	def_bool PREEMPTION
	select SRCU
	help
	  This option enables a task-based RCU implementation that uses
	  only voluntary context switch (not preemption!), idle, and
	  user-mode execution as quiescent states.
	  user-mode execution as quiescent states.  Not for manual selection.

config RCU_STALL_COMMON
	def_bool TREE_RCU
+257 −234

File changed.

Preview size limit exceeded, changes collapsed.

+4 −0
Original line number Diff line number Diff line
@@ -584,7 +584,11 @@ late_initcall(rcu_verify_early_boot_tests);
void rcu_early_boot_tests(void) {}
#endif /* CONFIG_PROVE_RCU */

#ifdef CONFIG_TASKS_RCU_GENERIC
#include "tasks.h"
#else /* #ifdef CONFIG_TASKS_RCU_GENERIC */
static inline void rcu_tasks_bootup_oddness(void) {}
#endif /* #else #ifdef CONFIG_TASKS_RCU_GENERIC */

#ifndef CONFIG_TINY_RCU