summaryrefslogtreecommitdiffstats
path: root/net/mac80211/key.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-08-21 22:07:20 +0200
committerJohannes Berg <johannes.berg@intel.com>2013-09-26 13:21:37 +0200
commitc7c71066c27f2bafb2ce3b10c407c0285f56acfa (patch)
tree183c3557d596a8ae69bf3ae9219e7ef49456052e /net/mac80211/key.c
parent272b98c6455f00884f0350f775c5342358ebb73f (diff)
downloadop-kernel-dev-c7c71066c27f2bafb2ce3b10c407c0285f56acfa.zip
op-kernel-dev-c7c71066c27f2bafb2ce3b10c407c0285f56acfa.tar.gz
mac80211: add ieee80211_iterate_active_interfaces_rtnl()
If it is needed to disconnect multiple virtual interfaces after (WoWLAN-) suspend, the most obvious approach would be to iterate all interfaces by calling ieee80211_iterate_active_interfaces() and then call ieee80211_resume_disconnect() for each one. This is what the iwlmvm driver does. Unfortunately, this causes a locking dependency from mac80211's iflist_mtx to the key_mtx. This is problematic as the former is intentionally never held while calling any driver operation to allow drivers to iterate with their own locks held. The key_mtx is held while installing a key into the driver though, so this new lock dependency means drivers implementing the logic above can no longer hold their own lock while iterating. To fix this, add a new ieee80211_iterate_active_interfaces_rtnl() function that iterates while the RTNL is already held. This is true during suspend/resume, so that then the locking dependency isn't introduced. While at it, also refactor the various interface iterators and keep only a single implementation called by the various cases. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/key.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud