mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
cfg80211: avoid holding the RTNL when calling the driver
Currently, _everything_ in cfg80211 holds the RTNL, and if you have a slow USB device (or a few) you can get some bad lock contention on that. Fix that by re-adding a mutex to each wiphy/rdev as we had at some point, so we have locking for the wireless_dev lists and all the other things in there, and also so that drivers still don't have to worry too much about it (they still won't get parallel calls for a single device). Then, we can restrict the RTNL to a few cases where we add or remove interfaces and really need the added protection. Some of the global list management still also uses the RTNL, since we need to have it anyway for netdev management, but we only hold the RTNL for very short periods of time here. Link: https://lore.kernel.org/r/20210122161942.81df9f5e047a.I4a8e1a60b18863ea8c5e6d3a0faeafb2d45b2f40@changeid Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> [marvell driver issues] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
2fe8ef1062
commit
a05829a722
39 changed files with 886 additions and 515 deletions
|
@ -67,7 +67,6 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
|||
struct cfg80211_scan_request *request;
|
||||
int n_channels, err;
|
||||
|
||||
ASSERT_RTNL();
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
|
||||
if (rdev->scan_req || rdev->scan_msg)
|
||||
|
@ -233,7 +232,7 @@ void cfg80211_conn_work(struct work_struct *work)
|
|||
u8 bssid_buf[ETH_ALEN], *bssid = NULL;
|
||||
enum nl80211_timeout_reason treason;
|
||||
|
||||
rtnl_lock();
|
||||
wiphy_lock(&rdev->wiphy);
|
||||
|
||||
list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
|
||||
if (!wdev->netdev)
|
||||
|
@ -266,7 +265,7 @@ void cfg80211_conn_work(struct work_struct *work)
|
|||
wdev_unlock(wdev);
|
||||
}
|
||||
|
||||
rtnl_unlock();
|
||||
wiphy_unlock(&rdev->wiphy);
|
||||
}
|
||||
|
||||
/* Returned bss is reference counted and must be cleaned up appropriately. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue