Message ID | 20181204182905.32267-1-stijn@linux-ipv6.be (mailing list archive) |
---|---|
State | Accepted |
Commit | 8c892df41500469729e0d662816300196e4f463d |
Delegated to: | Kalle Valo |
Headers | show |
Series | [wireless-drivers] brcmfmac: fix roamoff=1 modparam | expand |
Stijn Tintel <stijn@linux-ipv6.be> wrote: > When the update_connect_param callback is set, nl80211 expects the flag > WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is > only set when modparam roamoff=0, while the callback is set > unconditionally. Since commit 7f9a3e150ec7 this causes a warning in > wiphy_register, which breaks brcmfmac. > > Disable the update_connect_param callback when roamoff=0 to fix this. > > Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_PARAMS") > Cc: Stable <stable@vger.kernel.org> # 4.19+ > Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> > Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Should this go to 4.20? Arend?
Kalle Valo <kvalo@codeaurora.org> writes: > Stijn Tintel <stijn@linux-ipv6.be> wrote: > >> When the update_connect_param callback is set, nl80211 expects the flag >> WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is >> only set when modparam roamoff=0, while the callback is set >> unconditionally. Since commit 7f9a3e150ec7 this causes a warning in >> wiphy_register, which breaks brcmfmac. >> >> Disable the update_connect_param callback when roamoff=0 to fix this. >> >> Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_PARAMS") >> Cc: Stable <stable@vger.kernel.org> # 4.19+ >> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> >> Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> > > Should this go to 4.20? Arend? I talked with Arend offline and we concluded to push this to -next.
Stijn Tintel <stijn@linux-ipv6.be> wrote: > When the update_connect_param callback is set, nl80211 expects the flag > WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is > only set when modparam roamoff=0, while the callback is set > unconditionally. Since commit 7f9a3e150ec7 this causes a warning in > wiphy_register, which breaks brcmfmac. > > Disable the update_connect_param callback when roamoff=0 to fix this. > > Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_PARAMS") > Cc: Stable <stable@vger.kernel.org> # 4.19+ > Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> > Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Patch applied to wireless-drivers-next.git, thanks. 8c892df41500 brcmfmac: fix roamoff=1 modparam
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index 7f0a5bade70a..c0e3ae7bf2ae 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -5196,10 +5196,17 @@ static struct cfg80211_ops brcmf_cfg80211_ops = { .del_pmk = brcmf_cfg80211_del_pmk, }; -struct cfg80211_ops *brcmf_cfg80211_get_ops(void) +struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings) { - return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops), + struct cfg80211_ops *ops; + + ops = kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops), GFP_KERNEL); + + if (ops && settings->roamoff) + ops->update_connect_params = NULL; + + return ops; } struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h index a4aec0004e4f..9a6287f084a9 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h @@ -404,7 +404,7 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg); s32 brcmf_cfg80211_up(struct net_device *ndev); s32 brcmf_cfg80211_down(struct net_device *ndev); -struct cfg80211_ops *brcmf_cfg80211_get_ops(void); +struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings); enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp); struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c index b1f702faff4f..860a4372cb56 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c @@ -1130,7 +1130,7 @@ int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings) brcmf_dbg(TRACE, "Enter\n"); - ops = brcmf_cfg80211_get_ops(); + ops = brcmf_cfg80211_get_ops(settings); if (!ops) return -ENOMEM;