From: Mohammed Shafi Shajakhan <moham...@qca.qualcomm.com> In ath9k we make sure the following two things *if the first interface is ADHOC we cannot have any other interface. *we cannot add an ADHOC interface if there is already an interface is present.
when drv_add_interface is called during resume we got to consider number of vifs already present in addition to checking the drivers 'opmode' information about ADHOC, otherwise during suspend/resume we incorrectly assume an ADHOC interface is already present. Then we may miss some driver specific data for the ADHOC interface after resume. ath: phy0: Cannot create ADHOC interface when other interfaces already exist. WARNING: at net/mac80211/driver-ops.h:12 ieee80211_reconfig+0x1882/0x1ca0 [mac80211]() Hardware name: 2842RK1 wlan2: Failed check-sdata-in-driver check, flags: 0x0 Call Trace: [<c01361b2>] warn_slowpath_common+0x72/0xa0 [<f8aaa7c2>] ? ieee80211_reconfig+0x1882/0x1ca0 [mac80211] [<f8aaa7c2>] ? ieee80211_reconfig+0x1882/0x1ca0 [mac80211] [<c0136283>] warn_slowpath_fmt+0x33/0x40 [<f8aaa7c2>] ieee80211_reconfig+0x1882/0x1ca0 [mac80211] [<c06c1d1a>] ? mutex_lock_nested+0x23a/0x2f0 [<f8a95097>] ieee80211_resume+0x27/0x70 [mac80211] [<fd177edf>] wiphy_resume+0x8f/0xa0 [cfg80211] Cc: sta...@vger.kernel.org Cc: Rajkumar Manoharan <rmano...@qca.qualcomm.com> Signed-off-by: Mohammed Shafi Shajakhan <moham...@qca.qualcomm.com> --- drivers/net/wireless/ath/ath9k/main.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 4de4473..c26497d 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1443,11 +1443,14 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, } } - if ((ah->opmode == NL80211_IFTYPE_ADHOC) || - ((vif->type == NL80211_IFTYPE_ADHOC) && - sc->nvifs > 0)) { - ath_err(common, "Cannot create ADHOC interface when other" - " interfaces already exist.\n"); + if ((ah->opmode == NL80211_IFTYPE_ADHOC) && (sc->nvifs > 0)) { + ath_err(common, "Cannot create any other interface when an ADHOC interface already exists.\n"); + ret = -EINVAL; + goto out; + } + + if ((vif->type == NL80211_IFTYPE_ADHOC) && (sc->nvifs > 0)) { + ath_err(common, "Cannot create ADHOC interface when other interfaces already exist.\n"); ret = -EINVAL; goto out; } -- 1.7.0.4 _______________________________________________ ath9k-devel mailing list ath9k-devel@lists.ath9k.org https://lists.ath9k.org/mailman/listinfo/ath9k-devel