ARM: smp: BUG() if smp_send_reschedule() is called for an offline cpu

Sending an IPI_RESCHEDULE to an offline CPU is incorrect and potentially
bad for both power and stability. On some sub-architectures such as MSM,
if a power-collapsed CPU is unexpectedly woken up by an IPI, it will be
begin executing without the preparations that would normally happen as
part of CPU_UP_PREPARE. If clocks, voltage regulators, or other hardware
configuration are not performed, the booting CPU may cause general
instability or (at best) poor power performance since the CPU would be
powered up but not utilized.

One common cause for such issues is misuse of add_timer_on() or APIs
such as queue_work_on() which call it. If proper precautions are not
taken to block hotplug while these APIs are called then a race may
result in IPIs being sent to CPUs that are already offline.

This same argument could be applied to other IPIs (with the exception
of IPI_WAKEUP), but the others are already restricted to only online
CPUs by existing mechanisms, so an explicit assertion is not useful.

Change-Id: I437db112e7e2fa7c0635e4e97e265692621944f1
Signed-off-by: Matt Wagantall <mattw@codeaurora.org>
Merge "Merge "ASoC: msm: qdsp6v2: Fix voice mute issue when EC ref is set""
Merge "Merge "Merge "ASoC: msm: qdsp6v2: Fix voice mute issue when EC ref is set"""
Merge "Merge "TTY: msm_smd_tty: Fix simultaneous open/close race condition""
Merge "Merge "Merge "TTY: msm_smd_tty: Fix simultaneous open/close race condition"""
Merge "Merge "ASoC: msm: qdsp6v2: fix possible integer overflow""
Merge "Merge "Merge "ASoC: msm: qdsp6v2: fix possible integer overflow"""
Merge "Merge "ASoC: msm: Reset the stream open flag after CMD_CLOSE is sent to DSP""
Merge "Merge "Merge "ASoC: msm: Reset the stream open flag after CMD_CLOSE is sent to DSP"""
Merge "Merge "msm: mdss: refactor command mode vsync control logic""
Merge "Merge "Merge "msm: mdss: refactor command mode vsync control logic"""
Merge "Merge "msm: mdss: refactor command mode vsync control logic""
Merge "Merge "Merge "msm: mdss: refactor command mode vsync control logic"""
Merge "Merge "board: 8226: Install SMSC HUB gpio configs""
Merge "Merge "Merge "board: 8226: Install SMSC HUB gpio configs"""
Merge "Merge "power: qpnp-bms: fix unbalanced IRQ enables""
Merge "Merge "Merge "power: qpnp-bms: fix unbalanced IRQ enables"""
Merge "Merge "msm: clock: Add parent fields to gcc_ce1_clk and gcc_ce2_clk""
Merge "Merge "Merge "msm: clock: Add parent fields to gcc_ce1_clk and gcc_ce2_clk"""
Merge "Merge "leds: leds-qpnp: avoid calling pwm_disable when scaling leds' brightness""