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>
Signed-off-by: franciscofranco
<franciscofranco.1990@gmail.com>

idea is taken here -
https://github.com/franciscofranco/hammerhead/commit/fcddb1e73f1e9d06c7c1695a7b89e28823d2b018