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

Commit 28e18293 authored by Russell King's avatar Russell King
Browse files

ARM: SMP: ensure smp_send_stop() waits for CPUs to stop



Wait for CPUs to indicate that they've stopped, after sending the
stop IPI, rather than blindly continuing on and hoping that they've
stopped in time.  Print a warning if we fail to stop the other CPUs.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 0eb0511d
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -575,12 +575,24 @@ void smp_send_reschedule(int cpu)

void smp_send_stop(void)
{
	unsigned long timeout;

	if (num_online_cpus() > 1) {
		cpumask_t mask = cpu_online_map;
		cpu_clear(smp_processor_id(), mask);
	if (!cpus_empty(mask))

		smp_cross_call(&mask, IPI_CPU_STOP);
	}

	/* Wait up to one second for other CPUs to stop */
	timeout = USEC_PER_SEC;
	while (num_online_cpus() > 1 && timeout--)
		udelay(1);

	if (num_online_cpus() > 1)
		pr_warning("SMP: failed to stop secondary CPUs\n");
}

/*
 * not supported here
 */