diff options
author | Dong Aisheng <aisheng.dong@nxp.com> | 2016-01-20 20:21:36 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | 2d54b9df3b310619244c6dff66ddbcded66a0bbc (patch) | |
tree | 65dd9116271a00d22c0e673ecd7792bae5d339cb /drivers/net/wireless/bcmdhd | |
parent | 7468a106b6c9ba1f85039b5ae3a13a93c5e289f4 (diff) |
MLK-12254 bcmdhd: fix warning when connect adhoc network
When connect adhoc network, we got below warning, it's caused
by network stack changes during kernel upgrade.
root@imx6qdlsolo:/mnt/nfs/vte_mx63# iw wlan0 ibss join TestAdhoc1 2412
------------[ cut here ]------------
WARNING: CPU: 1 PID: 1251 at /home/bamboo/build/4.1.X-1.0.0_ga/fsl-imx-fb/temp_build_dir/build_fsl-imx-fb/tmp/work-shared/imx6qdlsolo/kernel-source/net/wireless/ibss.c:67 wl_notify_connect_status+0x7b0/0x10f0 [bcmdhd]()
root@imx6qdlsolo:/mnt/nfs/vte_mx6Modules linked in:3# bcmdhd ov5642_camera ov5640_camera_mipi_int ov5640_camera_int mxc_dcic galcore(O) mxc_v4l2_capture ipu_bg_overlay_sdc ipu_still v4l2_int_device ipu_prp_enc ipu_csi_enc ipu_fg_overlay_sdc evbug
CPU: 1 PID: 1251 Comm: wl_event_handle Tainted: G O 4.1.8-1.0.0+g87e6c2f #1
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<80015d84>] (unwind_backtrace) from [<80012728>] (show_stack+0x10/0x14)
[<80012728>] (show_stack) from [<80750a54>] (dump_stack+0x84/0xc4)
[<80750a54>] (dump_stack) from [<80032f3c>] (warn_slowpath_common+0x80/0xb0)
[<80032f3c>] (warn_slowpath_common) from [<80033008>] (warn_slowpath_null+0x1c/0x24)
[<80033008>] (warn_slowpath_null) from [<7f100060>] (wl_notify_connect_status+0x7b0/0x10f0 [bcmdhd])
[<7f100060>] (wl_notify_connect_status [bcmdhd]) from [<7f0f05bc>] (wl_event_handler+0x198/0x26c [bcmdhd])
[<7f0f05bc>] (wl_event_handler [bcmdhd]) from [<8004b588>] (kthread+0xdc/0xf4)
[<8004b588>] (kthread) from [<8000f528>] (ret_from_fork+0x14/0x2c)
---[ end trace 40b45ccda84900ce ]---
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Diffstat (limited to 'drivers/net/wireless/bcmdhd')
-rw-r--r-- | drivers/net/wireless/bcmdhd/wl_cfg80211.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c index f5a523a941a7..4468a95994bb 100644 --- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c +++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c @@ -7800,7 +7800,10 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev, u16 flags = ntoh16(e->flags); u32 status = ntoh32(e->status); bool active; - struct ieee80211_channel *chan; + struct ieee80211_channel *channel = NULL; + struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); + u32 chanspec, chan; + u32 freq, band; if (event == WLC_E_JOIN) { WL_DBG(("joined in IBSS network\n")); @@ -7810,7 +7813,15 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev, } if (event == WLC_E_JOIN || event == WLC_E_START || (event == WLC_E_LINK && (flags == WLC_EVENT_MSG_LINK))) { - chan = ieee80211_get_channel(bcmcfg_to_wiphy(cfg), cfg->channel); + err = wldev_iovar_getint(ndev, "chanspec", (s32 *)&chanspec); + if (unlikely(err)) { + WL_ERR(("Could not get chanspec %d\n", err)); + return err; + } + chan = wf_chspec_ctlchan(wl_chspec_driver_to_host(chanspec)); + band = (chan <= CH_MAX_2G_CHANNEL) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; + freq = ieee80211_channel_to_frequency(chan, band); + channel = ieee80211_get_channel(wiphy, freq); if (wl_get_drv_status(cfg, CONNECTED, ndev)) { /* ROAM or Redundant */ u8 *cur_bssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); @@ -7824,7 +7835,7 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev, wl_get_assoc_ies(cfg, ndev); wl_update_prof(cfg, ndev, NULL, (void *)&e->addr, WL_PROF_BSSID); wl_update_bss_info(cfg, ndev, false); - cfg80211_ibss_joined(ndev, (s8 *)&e->addr, chan, GFP_KERNEL); + cfg80211_ibss_joined(ndev, (s8 *)&e->addr, channel, GFP_KERNEL); } else { /* New connection */ @@ -7833,13 +7844,14 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev, wl_get_assoc_ies(cfg, ndev); wl_update_prof(cfg, ndev, NULL, (void *)&e->addr, WL_PROF_BSSID); wl_update_bss_info(cfg, ndev, false); - cfg80211_ibss_joined(ndev, (s8 *)&e->addr, chan, GFP_KERNEL); + cfg80211_ibss_joined(ndev, (s8 *)&e->addr, channel, GFP_KERNEL); wl_set_drv_status(cfg, CONNECTED, ndev); active = true; wl_update_prof(cfg, ndev, NULL, (void *)&active, WL_PROF_ACT); } } else if ((event == WLC_E_LINK && !(flags & WLC_EVENT_MSG_LINK)) || event == WLC_E_DEAUTH_IND || event == WLC_E_DISASSOC_IND) { + wl_clr_drv_status(cfg, CONNECTED, ndev); wl_clr_drv_status(cfg, DISCONNECTING, ndev); wl_link_down(cfg); wl_init_prof(cfg, ndev); |