rcu: Move rcu_cpu_kthread_status to rcu_data structure
Given that RCU has a perfectly good per-CPU rcu_data structure, most per-CPU quantities should be stored there. This commit therefore moves the rcu_cpu_kthread_status per-CPU variable to the rcu_data structure. This also makes this variable unconditionally present, which should be acceptable given the memory reduction due to the RCU flavor consolidation and also due to simplifications this will enable. Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
This commit is contained in:
Родитель
37f62d7cf0
Коммит
6ffdde28b7
|
@ -237,6 +237,8 @@ struct rcu_data {
|
||||||
/* 6) RCU priority boosting. */
|
/* 6) RCU priority boosting. */
|
||||||
struct task_struct *rcu_cpu_kthread_task;
|
struct task_struct *rcu_cpu_kthread_task;
|
||||||
/* rcuc per-CPU kthread or NULL. */
|
/* rcuc per-CPU kthread or NULL. */
|
||||||
|
unsigned int rcu_cpu_kthread_status;
|
||||||
|
/* Running status for rcuc. */
|
||||||
|
|
||||||
/* 7) Diagnostic data, including RCU CPU stall warnings. */
|
/* 7) Diagnostic data, including RCU CPU stall warnings. */
|
||||||
unsigned int softirq_snap; /* Snapshot of softirq activity. */
|
unsigned int softirq_snap; /* Snapshot of softirq activity. */
|
||||||
|
@ -407,7 +409,6 @@ static const char *tp_rcu_varname __used __tracepoint_string = rcu_name;
|
||||||
int rcu_dynticks_snap(struct rcu_data *rdp);
|
int rcu_dynticks_snap(struct rcu_data *rdp);
|
||||||
|
|
||||||
#ifdef CONFIG_RCU_BOOST
|
#ifdef CONFIG_RCU_BOOST
|
||||||
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
|
||||||
DECLARE_PER_CPU(int, rcu_cpu_kthread_cpu);
|
DECLARE_PER_CPU(int, rcu_cpu_kthread_cpu);
|
||||||
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
||||||
DECLARE_PER_CPU(char, rcu_cpu_has_work);
|
DECLARE_PER_CPU(char, rcu_cpu_has_work);
|
||||||
|
|
|
@ -40,7 +40,6 @@
|
||||||
/*
|
/*
|
||||||
* Control variables for per-CPU and per-rcu_node kthreads.
|
* Control variables for per-CPU and per-rcu_node kthreads.
|
||||||
*/
|
*/
|
||||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
|
||||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
||||||
DEFINE_PER_CPU(char, rcu_cpu_has_work);
|
DEFINE_PER_CPU(char, rcu_cpu_has_work);
|
||||||
|
|
||||||
|
@ -1310,7 +1309,7 @@ static void invoke_rcu_callbacks_kthread(void)
|
||||||
if (__this_cpu_read(rcu_data.rcu_cpu_kthread_task) != NULL &&
|
if (__this_cpu_read(rcu_data.rcu_cpu_kthread_task) != NULL &&
|
||||||
current != __this_cpu_read(rcu_data.rcu_cpu_kthread_task)) {
|
current != __this_cpu_read(rcu_data.rcu_cpu_kthread_task)) {
|
||||||
rcu_wake_cond(__this_cpu_read(rcu_data.rcu_cpu_kthread_task),
|
rcu_wake_cond(__this_cpu_read(rcu_data.rcu_cpu_kthread_task),
|
||||||
__this_cpu_read(rcu_cpu_kthread_status));
|
__this_cpu_read(rcu_data.rcu_cpu_kthread_status));
|
||||||
}
|
}
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
@ -1383,7 +1382,7 @@ static void rcu_cpu_kthread_setup(unsigned int cpu)
|
||||||
|
|
||||||
static void rcu_cpu_kthread_park(unsigned int cpu)
|
static void rcu_cpu_kthread_park(unsigned int cpu)
|
||||||
{
|
{
|
||||||
per_cpu(rcu_cpu_kthread_status, cpu) = RCU_KTHREAD_OFFCPU;
|
per_cpu(rcu_data.rcu_cpu_kthread_status, cpu) = RCU_KTHREAD_OFFCPU;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rcu_cpu_kthread_should_run(unsigned int cpu)
|
static int rcu_cpu_kthread_should_run(unsigned int cpu)
|
||||||
|
@ -1398,7 +1397,7 @@ static int rcu_cpu_kthread_should_run(unsigned int cpu)
|
||||||
*/
|
*/
|
||||||
static void rcu_cpu_kthread(unsigned int cpu)
|
static void rcu_cpu_kthread(unsigned int cpu)
|
||||||
{
|
{
|
||||||
unsigned int *statusp = this_cpu_ptr(&rcu_cpu_kthread_status);
|
unsigned int *statusp = this_cpu_ptr(&rcu_data.rcu_cpu_kthread_status);
|
||||||
char work, *workp = this_cpu_ptr(&rcu_cpu_has_work);
|
char work, *workp = this_cpu_ptr(&rcu_cpu_has_work);
|
||||||
int spincnt;
|
int spincnt;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче