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

Commit 701832cb authored by Kaushal Kumar's avatar Kaushal Kumar Committed by Matt Wagantall
Browse files

sched: Remove synchronize rcu/sched calls from _cpu_down



There is no need for sync_sched() in _cpu_down as stop_machine()
provides that barrier implicitly. Removing it also helps improve
hot-unplug latency.

The sync_sched/rcu were earlier removed for the same reason by the
commit 9ee349ad ("sched: Fix set_cpu_active() in cpu_down()"),
but recently got added as part of commit 6acce3ef ("sched:
Remove get_online_cpus() usage.").

CRs-Fixed: 667325
Change-Id: I97763004454d082d3cc2d9d9dbef7da923608600
Signed-off-by: default avatarKaushal Kumar <kaushalk@codeaurora.org>
[mattw@codeaurora.org: fix-up commit hashes in commit text]
Signed-off-by: default avatarMatt Wagantall <mattw@codeaurora.org>
parent 7193533b
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -375,28 +375,8 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
			__func__, cpu);
		goto out_release;
	}

	/*
	 * By now we've cleared cpu_active_mask, wait for all preempt-disabled
	 * and RCU users of this state to go away such that all new such users
	 * will observe it.
	 *
	 * For CONFIG_PREEMPT we have preemptible RCU and its sync_rcu() might
	 * not imply sync_sched(), so explicitly call both.
	 *
	 * Do sync before park smpboot threads to take care the rcu boost case.
	 */
#ifdef CONFIG_PREEMPT
	synchronize_sched();
#endif
	synchronize_rcu();

	smpboot_park_threads(cpu);

	/*
	 * So now all preempt/rcu users must observe !cpu_active().
	 */

	err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu));
	if (err) {
		/* CPU didn't die: tell everyone.  Can't complain. */