Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f680ab4 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar
Browse files

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: default avatarPaul 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: default avatarIngo Molnar <mingo@elte.hu>
parent b668c9cf
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ void rcu_bh_qs(int cpu);

#define rcu_init_sched()	do { } while (0)
extern void rcu_check_callbacks(int cpu, int user);
extern void __rcu_init(void);

/*
 * Return the number of grace periods.
@@ -69,7 +68,6 @@ static inline void synchronize_rcu_bh_expedited(void)
}

struct notifier_block;
extern int rcu_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu);

#ifdef CONFIG_NO_HZ

+0 −3
Original line number Diff line number Diff line
@@ -34,8 +34,6 @@ struct notifier_block;

extern void rcu_sched_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_expedited_torture_stats(char *page);

@@ -83,7 +81,6 @@ static inline void synchronize_rcu_bh_expedited(void)
	synchronize_sched_expedited();
}

extern void __rcu_init(void);
extern void rcu_check_callbacks(int cpu, int user);

extern long rcu_batches_completed(void);
+0 −22
Original line number Diff line number Diff line
@@ -161,28 +161,6 @@ EXPORT_SYMBOL_GPL(synchronize_rcu_bh);

#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)
{
	WARN_ON(num_online_cpus() != 1);
+1 −10
Original line number Diff line number Diff line
@@ -177,15 +177,6 @@ static void rcu_process_callbacks(struct softirq_action *unused)
	__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
 * 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);

void __rcu_init(void)
void __init rcu_init(void)
{
	open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
}
+14 −3
Original line number Diff line number Diff line
@@ -1644,7 +1644,7 @@ static void __cpuinit rcu_online_cpu(int cpu)
/*
 * 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)
{
	long cpu = (long)hcpu;
@@ -1781,8 +1781,10 @@ do { \
	} \
} while (0)

void __init __rcu_init(void)
void __init rcu_init(void)
{
	int i;

	rcu_bootup_announce();
#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
	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_preempt();
	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"