mirror of
https://github.com/adulau/aha.git
synced 2024-12-26 18:56:14 +00:00
rcu: Eliminate unneeded function wrapping
The functions rcu_init() is a wrapper for __rcu_init(), and also sets up the CPU-hotplug notifier for rcu_barrier_cpu_hotplug(). But TINY_RCU doesn't need CPU-hotplug notification, and the rcu_barrier_cpu_hotplug() is a simple wrapper for rcu_cpu_notify(). So push rcu_init() out to kernel/rcutree.c and kernel/rcutiny.c and get rid of the wrapper function rcu_barrier_cpu_hotplug(). Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com LKML-Reference: <12589088302320-git-send-email-> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
b668c9cf3e
commit
9f680ab414
5 changed files with 15 additions and 40 deletions
|
@ -38,7 +38,6 @@ void rcu_bh_qs(int cpu);
|
||||||
|
|
||||||
#define rcu_init_sched() do { } while (0)
|
#define rcu_init_sched() do { } while (0)
|
||||||
extern void rcu_check_callbacks(int cpu, int user);
|
extern void rcu_check_callbacks(int cpu, int user);
|
||||||
extern void __rcu_init(void);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the number of grace periods.
|
* Return the number of grace periods.
|
||||||
|
@ -69,7 +68,6 @@ static inline void synchronize_rcu_bh_expedited(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct notifier_block;
|
struct notifier_block;
|
||||||
extern int rcu_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu);
|
|
||||||
|
|
||||||
#ifdef CONFIG_NO_HZ
|
#ifdef CONFIG_NO_HZ
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,6 @@ struct notifier_block;
|
||||||
|
|
||||||
extern void rcu_sched_qs(int cpu);
|
extern void rcu_sched_qs(int cpu);
|
||||||
extern void rcu_bh_qs(int cpu);
|
extern void rcu_bh_qs(int cpu);
|
||||||
extern int rcu_cpu_notify(struct notifier_block *self,
|
|
||||||
unsigned long action, void *hcpu);
|
|
||||||
extern int rcu_needs_cpu(int cpu);
|
extern int rcu_needs_cpu(int cpu);
|
||||||
extern int rcu_expedited_torture_stats(char *page);
|
extern int rcu_expedited_torture_stats(char *page);
|
||||||
|
|
||||||
|
@ -83,7 +81,6 @@ static inline void synchronize_rcu_bh_expedited(void)
|
||||||
synchronize_sched_expedited();
|
synchronize_sched_expedited();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void __rcu_init(void);
|
|
||||||
extern void rcu_check_callbacks(int cpu, int user);
|
extern void rcu_check_callbacks(int cpu, int user);
|
||||||
|
|
||||||
extern long rcu_batches_completed(void);
|
extern long rcu_batches_completed(void);
|
||||||
|
|
|
@ -161,28 +161,6 @@ EXPORT_SYMBOL_GPL(synchronize_rcu_bh);
|
||||||
|
|
||||||
#endif /* #ifndef CONFIG_TINY_RCU */
|
#endif /* #ifndef CONFIG_TINY_RCU */
|
||||||
|
|
||||||
static int __cpuinit rcu_barrier_cpu_hotplug(struct notifier_block *self,
|
|
||||||
unsigned long action, void *hcpu)
|
|
||||||
{
|
|
||||||
return rcu_cpu_notify(self, action, hcpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init rcu_init(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
__rcu_init();
|
|
||||||
cpu_notifier(rcu_barrier_cpu_hotplug, 0);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We don't need protection against CPU-hotplug here because
|
|
||||||
* this is called early in boot, before either interrupts
|
|
||||||
* or the scheduler are operational.
|
|
||||||
*/
|
|
||||||
for_each_online_cpu(i)
|
|
||||||
rcu_barrier_cpu_hotplug(NULL, CPU_UP_PREPARE, (void *)(long)i);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rcu_scheduler_starting(void)
|
void rcu_scheduler_starting(void)
|
||||||
{
|
{
|
||||||
WARN_ON(num_online_cpus() != 1);
|
WARN_ON(num_online_cpus() != 1);
|
||||||
|
|
|
@ -177,15 +177,6 @@ static void rcu_process_callbacks(struct softirq_action *unused)
|
||||||
__rcu_process_callbacks(&rcu_bh_ctrlblk);
|
__rcu_process_callbacks(&rcu_bh_ctrlblk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Null function to handle CPU being onlined. Longer term, we want to
|
|
||||||
* make TINY_RCU avoid using rcupdate.c, but later...
|
|
||||||
*/
|
|
||||||
int rcu_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
|
|
||||||
{
|
|
||||||
return NOTIFY_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wait for a grace period to elapse. But it is illegal to invoke
|
* Wait for a grace period to elapse. But it is illegal to invoke
|
||||||
* synchronize_sched() from within an RCU read-side critical section.
|
* synchronize_sched() from within an RCU read-side critical section.
|
||||||
|
@ -285,7 +276,7 @@ void rcu_barrier_sched(void)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rcu_barrier_sched);
|
EXPORT_SYMBOL_GPL(rcu_barrier_sched);
|
||||||
|
|
||||||
void __rcu_init(void)
|
void __init rcu_init(void)
|
||||||
{
|
{
|
||||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1644,8 +1644,8 @@ static void __cpuinit rcu_online_cpu(int cpu)
|
||||||
/*
|
/*
|
||||||
* Handle CPU online/offline notification events.
|
* Handle CPU online/offline notification events.
|
||||||
*/
|
*/
|
||||||
int __cpuinit rcu_cpu_notify(struct notifier_block *self,
|
static int __cpuinit rcu_cpu_notify(struct notifier_block *self,
|
||||||
unsigned long action, void *hcpu)
|
unsigned long action, void *hcpu)
|
||||||
{
|
{
|
||||||
long cpu = (long)hcpu;
|
long cpu = (long)hcpu;
|
||||||
|
|
||||||
|
@ -1781,8 +1781,10 @@ do { \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
void __init __rcu_init(void)
|
void __init rcu_init(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
rcu_bootup_announce();
|
rcu_bootup_announce();
|
||||||
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
|
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
|
||||||
printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n");
|
printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n");
|
||||||
|
@ -1791,6 +1793,15 @@ void __init __rcu_init(void)
|
||||||
RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data);
|
RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data);
|
||||||
__rcu_init_preempt();
|
__rcu_init_preempt();
|
||||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't need protection against CPU-hotplug here because
|
||||||
|
* this is called early in boot, before either interrupts
|
||||||
|
* or the scheduler are operational.
|
||||||
|
*/
|
||||||
|
cpu_notifier(rcu_cpu_notify, 0);
|
||||||
|
for_each_online_cpu(i)
|
||||||
|
rcu_cpu_notify(NULL, CPU_UP_PREPARE, (void *)(long)i);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "rcutree_plugin.h"
|
#include "rcutree_plugin.h"
|
||||||
|
|
Loading…
Reference in a new issue