ath9k: Fix a WARNING in suspend/resume with IBSS
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
From: Mohammed Shafi Shajakhan <[email protected]>
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]
--- drivers/net/wireless/ath/ath9k/main.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-)
drivers/net/wireless/ath/ath9k/main.c +8 -5
@@ -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; }
Signature · 1 line
1.7.0.4
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Quoted 10 lines · Mohammed Shafi Shajakhan
From: Mohammed Shafi Shajakhan <[email protected]>
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.drivers/net/wireless/ath/ath9k/main.c +0
-3-if ((ah->opmode ==NL80211_IFTYPE_ADHOC ) || - ((vif->type ==NL80211_IFTYPE_ADHOC ) && - sc->nvifs >0 )) {
drivers/net/wireless/ath/ath9k/main.c static int ath9k_add_interface(struct ieee80211_hw *hw, · line 1453
Quoted 10 lines
drivers/net/wireless/ath/ath9k/main.c +8
-2-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" );
You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
johannes
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Hi Johannes,
Quoted 17 lines · Johannes Berg
Quoted 16 lines · Mohammed Shafi Shajakhan
From: Mohammed Shafi Shajakhan<[email protected]>
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.drivers/net/wireless/ath/ath9k/main.c +4
-5-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;
Quoted 8 lines
drivers/net/wireless/ath/ath9k/main.c static int ath9k_add_interface(struct ieee80211_hw *hw, · line 1453
Quoted 4 lines
drivers/net/wireless/ath/ath9k/main.c +4
-0+ } + +if ((vif->type ==NL80211_IFTYPE_ADHOC )&& (sc->nvifs>0 )) { +ath_err (common,"Cannot create ADHOC interface when other interfaces already exist.\n" );You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
i did not check this before, thanks a lot for your inputs. will send a proper v2 after checking this out.
Signature · 2 lines
thanks, shafi
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Quoted 29 lines · Mohammed Shafi Shajakhan
Hi Johannes,
Quoted 17 lines · Johannes Berg
Quoted 16 lines · Mohammed Shafi Shajakhan
From: Mohammed Shafi Shajakhan<[email protected]>
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.drivers/net/wireless/ath/ath9k/main.c +4
-5-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;Quoted 8 lines
drivers/net/wireless/ath/ath9k/main.c static int ath9k_add_interface(struct ieee80211_hw *hw, · line 1453
Quoted 4 lines
drivers/net/wireless/ath/ath9k/main.c +4
-0+ } + +if ((vif->type ==NL80211_IFTYPE_ADHOC )&& (sc->nvifs>0 )) { +ath_err (common,"Cannot create ADHOC interface when other interfaces already exist.\n" );You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
Quoted 2 lines
i did not check this before, thanks a lot for your inputs. will send a proper v2 after checking this out.
If this is needed for stable, you might want to keep this patch & send another one to remove it.
johannes
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Quoted 30 lines · Johannes Berg
Quoted 29 lines · Mohammed Shafi Shajakhan
Hi Johannes,
Quoted 25 lines · Johannes Berg
Quoted 10 lines · Mohammed Shafi Shajakhan
From: Mohammed Shafi Shajakhan<[email protected]>
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.drivers/net/wireless/ath/ath9k/main.c +0
-3-if ((ah->opmode ==NL80211_IFTYPE_ADHOC ) || - ((vif->type ==NL80211_IFTYPE_ADHOC )&& - sc->nvifs>0 )) {drivers/net/wireless/ath/ath9k/main.c static int ath9k_add_interface(struct ieee80211_hw *hw, · line 1453
Quoted 10 lines
drivers/net/wireless/ath/ath9k/main.c +8
-2-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" );You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
Quoted 5 lines
Quoted 2 lines
i did not check this before, thanks a lot for your inputs. will send a proper v2 after checking this out.
If this is needed for stable, you might want to keep this patch& send another one to remove it.
thanks Johannes.
i was looking at how to fix this properly in iface combination advertised to mac80211. got few doubts regarding this
*if an interface type is not all advertised in the ieee80211_iface_combination then it cannot it be co-existing with any other interfaces ?
please let me know is there some other way do that.
if we advertise something like this
static const struct ieee80211_iface_limit if_limits[] = {
{set1
.... },
{set 2
.... },
};then interface types in set1 and set2 co-exist as per the logic in cfg80211_can_change_interface. is there already a way we can make set1 and set2 interface types mutually exclusive ? thanks!
Signature · 2 lines
thanks, shafi
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Hi Mohammed,
Quoted 28 lines
Quoted 9 lines
Quoted 6 lines
Quoted 3 lines
You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
i did not check this before, thanks a lot for your inputs. will send a proper v2 after checking this out.
If this is needed for stable, you might want to keep this patch& send another one to remove it.
thanks Johannes.
i was looking at how to fix this properly in iface combination advertised to mac80211. got few doubts regarding this*if an interface type is not all advertised in the
ieee80211_iface_combinationthen it cannot it be co-existing with any other interfaces ?
please let me know is there some other way do that.if we advertise something like this
static const struct ieee80211_iface_limit if_limits[] = { {set1 .... }, {set 2 .... }, };
Quoted 3 lines
then interface types in set1 and set2 co-exist as per the logic in
cfg80211_can_change_interface. is there already a way we can make set1 and set2 interface types mutually exclusive ? thanks!
The sets are mutually exclusive, and there are implied sets of each interface with a max number of 1. So for example, in iwlwifi we don't advertise IBSS in the combinations at all, because it's not compatible with anything. In your case, I think the same applies, since you said
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
Thus, if you leave IBSS out of the combinations you should get the desired behaviour of not being able to combine IBSS with any other types.
johannes
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Quoted 9 lines · Johannes Berg
The sets are mutually exclusive, and there are implied sets of each interface with a max number of 1. So for example, in iwlwifi we don't advertise IBSS in the combinations at all, because it's not compatible with anything. In your case, I think the same applies, since you said
? ? ? ?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
I've been following the thread and still can't get this confusion out of my head:
i'm currently using kernel 3.3.2 (openwrt trunk r31439), with Atheros AR9285 and i can succesfully combine IBSS interface with AP or STA modes...
# iw dev phy#0 Interface wlan0-1 ifindex 11 type AP Interface wlan0-2 ifindex 10 type IBSS Interface wlan0 ifindex 9 type AP
So, does this patch mean this functionality will be lost in future versions of ath9k?
or maybe it is officially unsupported and openwrt has patches applied? or, even worse, I completely misunderstood what you're talking about? (in that case i'm sorry for the noise)
Thanks a lot,
Guido
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
Quoted 29 lines · Guido Iribarren
Quoted 9 lines · Johannes Berg
The sets are mutually exclusive, and there are implied sets of each interface with a max number of 1. So for example, in iwlwifi we don't advertise IBSS in the combinations at all, because it's not compatible with anything. In your case, I think the same applies, since you said
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
I've been following the thread and still can't get this confusion out of my head:
i'm currently using kernel 3.3.2 (openwrt trunk r31439), with Atheros AR9285 and i can succesfully combine IBSS interface with AP or STA modes...# iw dev phy#0 Interface wlan0-1 ifindex 11 type AP Interface wlan0-2 ifindex 10 type IBSS Interface wlan0 ifindex 9 type AP
Quoted 5 lines
So, does this patch mean this functionality will be lost in future versions of ath9k?
or maybe it is officially unsupported and openwrt has patches applied? or, even worse, I completely misunderstood what you're talking about? (in that case i'm sorry for the noise)
It's officially unsupported, OpenWrt has patches to enable it.
- Felix
PATCH 1/1 ath9k: Fix a WARNING in suspend/resume with IBSS
In reply to Johannes BergHi Johannes,
Quoted 37 lines
Quoted 28 lines
Quoted 9 lines
Quoted 6 lines
Quoted 3 lines
You could just remove the entire check since the interface combinations you advertise don't allow it, I think? Or just fix those combinations :-)
i did not check this before, thanks a lot for your inputs. will send a proper v2 after checking this out.
If this is needed for stable, you might want to keep this patch& send
another one to remove it.thanks Johannes.
i was looking at how to fix this properly in iface combination advertised to mac80211. got few doubts regarding this*if an interface type is not all advertised in the
ieee80211_iface_combinationthen it cannot it be co-existing with any other interfaces ?
please let me know is there some other way do that.if we advertise something like this
static const struct ieee80211_iface_limit if_limits[] = { {set1 .... }, {set 2 .... }, };Quoted 3 lines
then interface types in set1 and set2 co-exist as per the logic in
cfg80211_can_change_interface. is there already a way we can make set1 and set2 interface types mutually exclusive ? thanks!The sets are mutually exclusive, and there are implied sets of each interface with a max number of 1. So for example, in iwlwifi we don't advertise IBSS in the combinations at all, because it's not compatible with anything. In your case, I think the same applies, since you said
Quoted 8 lines
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
Thus, if you leave IBSS out of the combinations you should get the desired behaviour of not being able to combine IBSS with any other types.
ath9k and also iwlwifi seems to have IBSS check not included in any of the interface combinations, but still i am able to IBSS interface atleast in ath9k with the checks removed in drv_add_interface. it seems we are allowing any interface type to be added even if its not added in the ieee80211_iface_combination structure.
i am sending an RFC to add this check in cfg80211 based on my understanding. please review my understanding and any corrections needed. thanks for your thoughts!
Signature · 2 lines
thanks, shafi