Revision bb143f814ea488769ca2e79e0b376139cb5f134b authored by Vineet Gupta on 23 February 2016, 06:25:16 UTC, committed by Vineet Gupta on 24 February 2016, 05:37:28 UTC
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>
1 parent 3e5177c
File | Mode | Size |
---|---|---|
Kconfig | -rw-r--r-- | 3.1 KB |
Makefile | -rw-r--r-- | 577 bytes |
associola.c | -rw-r--r-- | 48.2 KB |
auth.c | -rw-r--r-- | 23.9 KB |
bind_addr.c | -rw-r--r-- | 13.7 KB |
chunk.c | -rw-r--r-- | 9.5 KB |
debug.c | -rw-r--r-- | 4.2 KB |
endpointola.c | -rw-r--r-- | 12.1 KB |
input.c | -rw-r--r-- | 32.5 KB |
inqueue.c | -rw-r--r-- | 6.2 KB |
ipv6.c | -rw-r--r-- | 28.7 KB |
objcnt.c | -rw-r--r-- | 4.0 KB |
output.c | -rw-r--r-- | 22.3 KB |
outqueue.c | -rw-r--r-- | 52.1 KB |
primitive.c | -rw-r--r-- | 7.3 KB |
probe.c | -rw-r--r-- | 5.9 KB |
proc.c | -rw-r--r-- | 15.1 KB |
protocol.c | -rw-r--r-- | 41.6 KB |
sm_make_chunk.c | -rw-r--r-- | 102.6 KB |
sm_sideeffect.c | -rw-r--r-- | 48.6 KB |
sm_statefuns.c | -rw-r--r-- | 196.9 KB |
sm_statetable.c | -rw-r--r-- | 31.2 KB |
socket.c | -rw-r--r-- | 207.9 KB |
ssnmap.c | -rw-r--r-- | 3.1 KB |
sysctl.c | -rw-r--r-- | 12.4 KB |
transport.c | -rw-r--r-- | 19.7 KB |
tsnmap.c | -rw-r--r-- | 9.5 KB |
ulpevent.c | -rw-r--r-- | 29.1 KB |
ulpqueue.c | -rw-r--r-- | 29.0 KB |
Computing file changes ...