linux/arch/arc
Vineet Gupta bb143f814e ARCv2: SMP: Emulate IPI to self using software triggered interrupt
ARConnect/MCIP Inter-Core-Interrupt module can't send interrupt to
local core. So use core intc capability to trigger software
interrupt to self, using an unsued IRQ #21.

This showed up as csd deadlock with LTP trace_sched on a dual core
system. This test acts as scheduler fuzzer, triggering all sorts of
schedulting activity. Trouble starts with IPI to self, which doesn't get
delivered (effectively lost due to H/w capability), but the msg intended
to be sent remain enqueued in per-cpu @ipi_data.

All subsequent IPIs to this core from other cores get elided due to the
IPI coalescing optimization in ipi_send_msg_one() where a pending msg
implies an IPI already sent and assumes other core is yet to ack it.
After the elided IPI, other core simply goes into csd_lock_wait()
but never comes out as this core never sees the interrupt.

Fixes STAR 9001008624

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: <stable@vger.kernel.org>        [4.2]
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2016-02-24 11:07:28 +05:30
..
boot ARC: [plat-sim] unbork non default CONFIG_LINUX_LINK_BASE 2015-12-17 11:06:43 +05:30
configs arc: get rid of DEVTMPFS dependency on INITRAMFS_SOURCE 2016-02-23 12:31:04 +05:30
include ARCv2: SMP: Emulate IPI to self using software triggered interrupt 2016-02-24 11:07:28 +05:30
kernel ARCv2: SMP: Emulate IPI to self using software triggered interrupt 2016-02-24 11:07:28 +05:30
lib ARCv2: lib: memcpy: use local symbols 2015-11-03 17:33:00 +05:30
mm arc: convert to dma_map_ops 2016-01-20 17:09:18 -08:00
oprofile ARC: OProfile support 2013-02-15 23:16:00 +05:30
plat-axs10x ARCv2: smp: [plat-*]: No need to explicitly call mcip_init_smp() 2015-10-28 16:13:41 +05:30
plat-sim ARC: remove extraneous header include 2015-11-14 13:11:38 +05:30
plat-tb10x ARC: [plat*] move code out of .init_machine into common 2014-10-13 14:46:13 +05:30
Kbuild
Kconfig arc: get rid of DEVTMPFS dependency on INITRAMFS_SOURCE 2016-02-23 12:31:04 +05:30
Kconfig.debug ARC: With earlycon in use, retire EARLY_PRINTK 2015-05-11 11:20:21 +05:30
Makefile ARC: Assume multiplier is always present 2016-02-18 17:30:03 +05:30