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

Commit 1268fbc7 authored by Frederic Weisbecker's avatar Frederic Weisbecker Committed by Paul E. McKenney
Browse files

nohz: Remove tick_nohz_idle_enter_norcu() / tick_nohz_idle_exit_norcu()



Those two APIs were provided to optimize the calls of
tick_nohz_idle_enter() and rcu_idle_enter() into a single
irq disabled section. This way no interrupt happening in-between would
needlessly process any RCU job.

Now we are talking about an optimization for which benefits
have yet to be measured. Let's start simple and completely decouple
idle rcu and dyntick idle logics to simplify.

Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent b58bdcca
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -183,7 +183,8 @@ void cpu_idle(void)

	/* endless idle loop with no priority at all */
	while (1) {
		tick_nohz_idle_enter_norcu();
		tick_nohz_idle_enter();
		rcu_idle_enter();
		leds_event(led_idle_start);
		while (!need_resched()) {
#ifdef CONFIG_HOTPLUG_CPU
@@ -213,7 +214,8 @@ void cpu_idle(void)
			}
		}
		leds_event(led_idle_end);
		tick_nohz_idle_exit_norcu();
		rcu_idle_exit();
		tick_nohz_idle_exit();
		preempt_enable_no_resched();
		schedule();
		preempt_disable();
+4 −2
Original line number Diff line number Diff line
@@ -34,10 +34,12 @@ void cpu_idle(void)
{
	/* endless idle loop with no priority at all */
	while (1) {
		tick_nohz_idle_enter_norcu();
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched())
			cpu_idle_sleep();
		tick_nohz_idle_exit_norcu();
		rcu_idle_exit();
		tick_nohz_idle_exit();
		preempt_enable_no_resched();
		schedule();
		preempt_disable();
+4 −2
Original line number Diff line number Diff line
@@ -88,10 +88,12 @@ void cpu_idle(void)
#endif
		if (!idle)
			idle = default_idle;
		tick_nohz_idle_enter_norcu();
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched())
			idle();
		tick_nohz_idle_exit_norcu();
		rcu_idle_exit();
		tick_nohz_idle_exit();
		preempt_enable_no_resched();
		schedule();
		preempt_disable();
+4 −2
Original line number Diff line number Diff line
@@ -103,10 +103,12 @@ void cpu_idle(void)
		if (!idle)
			idle = default_idle;

		tick_nohz_idle_enter_norcu();
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched())
			idle();
		tick_nohz_idle_exit_norcu();
		rcu_idle_exit();
		tick_nohz_idle_exit();

		preempt_enable_no_resched();
		schedule();
+4 −2
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ void __noreturn cpu_idle(void)

	/* endless idle loop with no priority at all */
	while (1) {
		tick_nohz_idle_enter_norcu();
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched() && cpu_online(cpu)) {
#ifdef CONFIG_MIPS_MT_SMTC
			extern void smtc_idle_loop_hook(void);
@@ -77,7 +78,8 @@ void __noreturn cpu_idle(void)
		     system_state == SYSTEM_BOOTING))
			play_dead();
#endif
		tick_nohz_idle_exit_norcu();
		rcu_idle_exit();
		tick_nohz_idle_exit();
		preempt_enable_no_resched();
		schedule();
		preempt_disable();
Loading