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-- | 9.4 KB |
Makefile | -rw-r--r-- | 1.2 KB |
aes_ccm.c | -rw-r--r-- | 2.6 KB |
aes_ccm.h | -rw-r--r-- | 848 bytes |
aes_cmac.c | -rw-r--r-- | 3.1 KB |
aes_cmac.h | -rw-r--r-- | 718 bytes |
aes_gcm.c | -rw-r--r-- | 2.4 KB |
aes_gcm.h | -rw-r--r-- | 727 bytes |
aes_gmac.c | -rw-r--r-- | 2.0 KB |
aes_gmac.h | -rw-r--r-- | 605 bytes |
agg-rx.c | -rw-r--r-- | 13.3 KB |
agg-tx.c | -rw-r--r-- | 29.1 KB |
cfg.c | -rw-r--r-- | 89.9 KB |
chan.c | -rw-r--r-- | 44.7 KB |
debug.h | -rw-r--r-- | 4.9 KB |
debugfs.c | -rw-r--r-- | 8.0 KB |
debugfs.h | -rw-r--r-- | 401 bytes |
debugfs_key.c | -rw-r--r-- | 11.8 KB |
debugfs_key.h | -rw-r--r-- | 1.1 KB |
debugfs_netdev.c | -rw-r--r-- | 22.5 KB |
debugfs_netdev.h | -rw-r--r-- | 732 bytes |
debugfs_sta.c | -rw-r--r-- | 11.9 KB |
debugfs_sta.h | -rw-r--r-- | 427 bytes |
driver-ops.c | -rw-r--r-- | 7.3 KB |
driver-ops.h | -rw-r--r-- | 29.4 KB |
ethtool.c | -rw-r--r-- | 6.1 KB |
ht.c | -rw-r--r-- | 15.3 KB |
ibss.c | -rw-r--r-- | 50.5 KB |
ieee80211_i.h | -rw-r--r-- | 65.4 KB |
iface.c | -rw-r--r-- | 50.8 KB |
key.c | -rw-r--r-- | 32.3 KB |
key.h | -rw-r--r-- | 4.5 KB |
led.c | -rw-r--r-- | 10.0 KB |
led.h | -rw-r--r-- | 2.6 KB |
main.c | -rw-r--r-- | 34.2 KB |
mesh.c | -rw-r--r-- | 38.7 KB |
mesh.h | -rw-r--r-- | 13.3 KB |
mesh_hwmp.c | -rw-r--r-- | 34.9 KB |
mesh_pathtbl.c | -rw-r--r-- | 29.3 KB |
mesh_plink.c | -rw-r--r-- | 30.8 KB |
mesh_ps.c | -rw-r--r-- | 16.4 KB |
mesh_sync.c | -rw-r--r-- | 6.8 KB |
michael.c | -rw-r--r-- | 2.2 KB |
michael.h | -rw-r--r-- | 602 bytes |
mlme.c | -rw-r--r-- | 143.6 KB |
ocb.c | -rw-r--r-- | 6.8 KB |
offchannel.c | -rw-r--r-- | 26.2 KB |
pm.c | -rw-r--r-- | 5.4 KB |
rate.c | -rw-r--r-- | 23.8 KB |
rate.h | -rw-r--r-- | 4.0 KB |
rc80211_minstrel.c | -rw-r--r-- | 20.8 KB |
rc80211_minstrel.h | -rw-r--r-- | 4.2 KB |
rc80211_minstrel_debugfs.c | -rw-r--r-- | 7.4 KB |
rc80211_minstrel_ht.c | -rw-r--r-- | 37.5 KB |
rc80211_minstrel_ht.h | -rw-r--r-- | 3.0 KB |
rc80211_minstrel_ht_debugfs.c | -rw-r--r-- | 8.9 KB |
rx.c | -rw-r--r-- | 101.7 KB |
scan.c | -rw-r--r-- | 32.8 KB |
spectmgmt.c | -rw-r--r-- | 7.7 KB |
sta_info.c | -rw-r--r-- | 57.2 KB |
sta_info.h | -rw-r--r-- | 21.8 KB |
status.c | -rw-r--r-- | 28.0 KB |
tdls.c | -rw-r--r-- | 54.3 KB |
tkip.c | -rw-r--r-- | 10.6 KB |
tkip.h | -rw-r--r-- | 917 bytes |
trace.c | -rw-r--r-- | 1.2 KB |
trace.h | -rw-r--r-- | 49.9 KB |
trace_msg.h | -rw-r--r-- | 1.2 KB |
tx.c | -rw-r--r-- | 106.1 KB |
util.c | -rw-r--r-- | 86.9 KB |
vht.c | -rw-r--r-- | 13.5 KB |
wep.c | -rw-r--r-- | 9.1 KB |
wep.h | -rw-r--r-- | 1.1 KB |
wme.c | -rw-r--r-- | 6.0 KB |
wme.h | -rw-r--r-- | 709 bytes |
wpa.c | -rw-r--r-- | 31.3 KB |
wpa.h | -rw-r--r-- | 1.7 KB |
Computing file changes ...