linux/net/mac80211
Bob Copeland e596af8279 mac80211: mesh: flush paths outside of plink lock
Lockdep warned of a lock dependency between the mesh_plink lock
and the internal lock for the rhashtable.  The problem is that
the rhashtable code uses a spin lock with softirqs enabled, while
mesh_plink_timer executes a walk (to flush paths on a state change)
inside a softirq with the plink lock held.

This leads to the following deadlock if the timer fires while rht
lock is held on this CPU, and plink lock is held on another CPU:

   CPU0                         CPU1
   ----                         ----
   lock(&(&ht->lock)->rlock);
                                local_irq_disable();
                                lock(&(&sta->mesh->plink_lock)->rlock);
                                lock(&(&ht->lock)->rlock);
   <Interrupt>
   lock(&(&sta->mesh->plink_lock)->rlock);
   *** DEADLOCK ***

Fix by waiting until we drop the plink lock to flush paths.

Fixes: d48a1b7cd439 ("mac80211: mesh: convert path table to rhashtable")
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2016-04-05 21:34:54 +02:00
..
aes_ccm.c mac80211: Switch to new AEAD interface 2015-05-28 11:23:20 +08:00
aes_ccm.h mac80111: Add CCMP-256 cipher 2015-01-27 11:07:35 +01:00
aes_cmac.c mac80211: remove ieee80211_aes_cmac_calculate_k1_k2() 2015-08-13 11:31:45 +02:00
aes_cmac.h mac80111: Add BIP-CMAC-256 cipher 2015-01-27 11:09:13 +01:00
aes_gcm.c mac80211: Switch to new AEAD interface 2015-05-28 11:23:20 +08:00
aes_gcm.h mac80111: Add GCMP and GCMP-256 ciphers 2015-01-27 11:06:09 +01:00
aes_gmac.c mac80211: Switch to new AEAD interface 2015-05-28 11:23:20 +08:00
aes_gmac.h mac80111: Add BIP-GMAC-128 and BIP-GMAC-256 ciphers 2015-01-27 11:10:13 +01:00
agg-rx.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
agg-tx.c mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
cfg.c mac80211: track and tell driver about GO client P2P PS abilities 2016-04-05 21:34:49 +02:00
chan.c mac80211: Recalc min chandef when station is associated 2016-02-24 09:04:19 +01:00
debug.h mac80211: 802.11p OCB mode support 2014-11-04 13:18:21 +01:00
debugfs_key.c mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
debugfs_key.h
debugfs_netdev.c mac80211: remove last_beacon/ave_beacon debugfs files 2015-09-22 15:21:25 +02:00
debugfs_netdev.h mac80211: fix some missing includes 2014-04-09 14:49:43 +02:00
debugfs_sta.c mac80211: clean up station flags debugfs 2016-04-05 12:12:26 +02:00
debugfs_sta.h
debugfs.c Here's another round of updates for -next: 2016-03-01 17:03:27 -05:00
debugfs.h mac80211: fix some missing includes 2014-04-09 14:49:43 +02:00
driver-ops.c mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
driver-ops.h mac80211: synchronize driver rx queues before removing a station 2016-04-05 10:56:34 +02:00
ethtool.c mac80211: move station statistics into sub-structs 2015-10-21 10:08:22 +02:00
ht.c mac80211: limit the A-MSDU Tx based on peer's capabilities 2016-02-24 09:04:20 +01:00
ibss.c Here's another round of updates for -next: 2016-03-01 17:03:27 -05:00
ieee80211_i.h mac80211: mesh: convert path table to rhashtable 2016-04-05 10:56:33 +02:00
iface.c mac80211: mesh: fix cleanup for mesh pathtable 2016-04-05 21:34:53 +02:00
Kconfig mac80211: use DECLARE_EWMA 2015-08-14 17:49:53 +02:00
key.c mac80211: remove ieee80211_get_key_tx_seq/ieee80211_set_key_tx_seq 2016-02-24 09:04:39 +01:00
key.h mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
led.c mac80211: fix throughput LED trigger 2015-05-11 19:16:04 +02:00
led.h mac80211: make LED triggering depend on activation 2015-05-05 14:21:56 +02:00
main.c mac80211: add NETIF_F_RXCSUM to features white list 2016-04-05 11:45:51 +02:00
Makefile mac80211: remove event.c 2015-10-14 18:40:26 +02:00
mesh_hwmp.c mac80211: mesh: fix crash in mesh_path_timer 2016-04-05 21:34:49 +02:00
mesh_pathtbl.c mac80211: mesh: embed gates hlist head directly 2016-04-05 21:34:51 +02:00
mesh_plink.c mac80211: mesh: flush paths outside of plink lock 2016-04-05 21:34:54 +02:00
mesh_ps.c mac80211: mesh: separate plid and aid concepts 2015-07-17 15:47:11 +02:00
mesh_sync.c mac80211: move mesh related station fields to own struct 2015-07-17 15:38:06 +02:00
mesh.c mac80211: mesh: fix cleanup for mesh pathtable 2016-04-05 21:34:53 +02:00
mesh.h mac80211: mesh: fix cleanup for mesh pathtable 2016-04-05 21:34:53 +02:00
michael.c
michael.h mac80211: fix some missing includes 2014-04-09 14:49:43 +02:00
mlme.c mac80211: avoid useless memory write on each frame RX 2016-04-05 21:34:21 +02:00
ocb.c mac80211: move station statistics into sub-structs 2015-10-21 10:08:22 +02:00
offchannel.c mac80211: avoid ROC during hw restart 2016-01-14 11:10:14 +01:00
pm.c mac80211: don't reconfigure sched scan in case of wowlan 2015-11-03 10:42:05 +01:00
rate.c mac80211: further improve "no supported rates" warning 2015-11-03 10:56:42 +01:00
rate.h mac80211: remove sta_info debugfs sub-struct 2016-04-05 11:59:05 +02:00
rc80211_minstrel_debugfs.c mac80211: minstrel[_ht]: remove non-ascii debugfs characters 2015-09-29 15:56:47 +02:00
rc80211_minstrel_ht_debugfs.c mac80211: minstrel[_ht]: remove non-ascii debugfs characters 2015-09-29 15:56:47 +02:00
rc80211_minstrel_ht.c mac80211: minstrel_ht: improve sample rate skip logic 2016-04-05 11:40:06 +02:00
rc80211_minstrel_ht.h mac80211: add max lossless throughput per rate 2015-04-01 20:44:32 +02:00
rc80211_minstrel.c mac80211: minstrel: Change expected throughput unit back to Kbps 2016-02-02 15:57:02 +01:00
rc80211_minstrel.h mac80211: add standard deviation to Minstrel stats 2015-04-01 20:44:33 +02:00
rx.c mac80211: fix cipher scheme function name 2016-04-05 12:12:41 +02:00
scan.c mac80211: Support a scan request for a specific BSSID 2016-04-05 10:56:28 +02:00
spectmgmt.c mac80211: remove unused variable in ieee80211_parse_ch_switch_ie() 2014-12-17 15:45:17 +01:00
sta_info.c mac80211: track and tell driver about GO client P2P PS abilities 2016-04-05 21:34:49 +02:00
sta_info.h mac80211: clean up station flags debugfs 2016-04-05 12:12:26 +02:00
status.c mac80211: use reset to set header pointer 2016-03-04 22:45:13 -05:00
tdls.c mac80211: TDLS: add proper HT-oper IE 2015-11-03 10:42:47 +01:00
tkip.c mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
tkip.h mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
trace_msg.h mac80211: Move message tracepoints to their own header 2015-04-07 12:32:09 -04:00
trace.c mac80211: Move message tracepoints to their own header 2015-04-07 12:32:09 -04:00
trace.h mac80211: synchronize driver rx queues before removing a station 2016-04-05 10:56:34 +02:00
tx.c mac80211: do not pass injected frames without a valid rate to the driver 2016-04-05 10:58:21 +02:00
util.c mac80211: allow not sending MIC up from driver for HW crypto 2016-04-05 10:48:56 +02:00
vht.c mac80211: move MU_MIMO_OWNER flag to ieee80211_vif 2016-02-24 09:04:40 +01:00
wep.c mac80211: move WEP tailroom size check 2015-05-11 14:51:29 +02:00
wep.h mac80211: move RX WEP weak IV counting 2012-03-13 14:54:16 -04:00
wme.c mac80211: synchronously reserve TID per station 2014-11-19 18:45:36 +01:00
wme.h mac80211: add WMM admission control support 2014-10-22 10:42:09 +02:00
wpa.c mac80211: allow not sending MIC up from driver for HW crypto 2016-04-05 10:48:56 +02:00
wpa.h mac80111: Add BIP-GMAC-128 and BIP-GMAC-256 ciphers 2015-01-27 11:10:13 +01:00