summaryrefslogtreecommitdiff
path: root/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2021-01-26 11:54:09 +0100
committerJohannes Berg <johannes.berg@intel.com>2021-01-26 12:21:42 +0100
commit81f153faacd04c049e5482d6ff33daddc30ed44e (patch)
tree11d3dca9d472cd0e21b535a1d148330530c96cff /drivers/staging/rtl8723bs/os_dep/wifi_regd.c
parent054c9939b4800a91475d8d89905827bf9e1ad97a (diff)
staging: rtl8723bs: fix wireless regulatory API misuse
This code ends up calling wiphy_apply_custom_regulatory(), for which we document that it should be called before wiphy_register(). This driver doesn't do that, but calls it from ndo_open() with the RTNL held, which caused deadlocks. Since the driver just registers static regdomain data and then the notifier applies the channel changes if any, there's no reason for it to call this in ndo_open(), move it earlier to fix the deadlock. Reported-and-tested-by: Hans de Goede <hdegoede@redhat.com> Fixes: 51d62f2f2c50 ("cfg80211: Save the regulatory domain with a lock") Link: https://lore.kernel.org/r/20210126115409.d5fd6f8fe042.Ib5823a6feb2e2aa01ca1a565d2505367f38ad246@changeid Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/staging/rtl8723bs/os_dep/wifi_regd.c')
-rw-r--r--drivers/staging/rtl8723bs/os_dep/wifi_regd.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/staging/rtl8723bs/os_dep/wifi_regd.c b/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
index 578b9f734231..2833fc6901e6 100644
--- a/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
+++ b/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
@@ -139,15 +139,11 @@ static void _rtw_regd_init_wiphy(struct rtw_regulatory *reg,
_rtw_reg_apply_flags(wiphy);
}
-int rtw_regd_init(struct adapter *padapter,
- void (*reg_notifier)(struct wiphy *wiphy,
- struct regulatory_request *request))
+void rtw_regd_init(struct wiphy *wiphy,
+ void (*reg_notifier)(struct wiphy *wiphy,
+ struct regulatory_request *request))
{
- struct wiphy *wiphy = padapter->rtw_wdev->wiphy;
-
_rtw_regd_init_wiphy(NULL, wiphy, reg_notifier);
-
- return 0;
}
void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)