mac80211: fix aggregation related kernel warnings when using wds
SVN-Revision: 29296
This commit is contained in:
parent
8a33526c4e
commit
e735154874
1 changed files with 95 additions and 0 deletions
95
package/mac80211/patches/560-mac80211_fix_ap_vlan_aggr.patch
Normal file
95
package/mac80211/patches/560-mac80211_fix_ap_vlan_aggr.patch
Normal file
|
@ -0,0 +1,95 @@
|
|||
--- a/net/mac80211/driver-ops.h
|
||||
+++ b/net/mac80211/driver-ops.h
|
||||
@@ -10,6 +10,16 @@ static inline void check_sdata_in_driver
|
||||
WARN_ON(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER));
|
||||
}
|
||||
|
||||
+static inline struct ieee80211_sub_if_data *
|
||||
+get_bss_sdata(struct ieee80211_sub_if_data *sdata)
|
||||
+{
|
||||
+ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
+ sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
|
||||
+ u.ap);
|
||||
+
|
||||
+ return sdata;
|
||||
+}
|
||||
+
|
||||
static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
|
||||
{
|
||||
local->ops->tx(&local->hw, skb);
|
||||
@@ -427,6 +437,7 @@ static inline void drv_sta_notify(struct
|
||||
enum sta_notify_cmd cmd,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
+ sdata = get_bss_sdata(sdata);
|
||||
check_sdata_in_driver(sdata);
|
||||
|
||||
trace_drv_sta_notify(local, sdata, cmd, sta);
|
||||
@@ -443,6 +454,7 @@ static inline int drv_sta_add(struct iee
|
||||
|
||||
might_sleep();
|
||||
|
||||
+ sdata = get_bss_sdata(sdata);
|
||||
check_sdata_in_driver(sdata);
|
||||
|
||||
trace_drv_sta_add(local, sdata, sta);
|
||||
@@ -460,6 +472,7 @@ static inline void drv_sta_remove(struct
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
+ sdata = get_bss_sdata(sdata);
|
||||
check_sdata_in_driver(sdata);
|
||||
|
||||
trace_drv_sta_remove(local, sdata, sta);
|
||||
@@ -553,6 +566,7 @@ static inline int drv_ampdu_action(struc
|
||||
|
||||
might_sleep();
|
||||
|
||||
+ sdata = get_bss_sdata(sdata);
|
||||
check_sdata_in_driver(sdata);
|
||||
|
||||
trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn, buf_size);
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -353,10 +353,6 @@ static int sta_info_finish_insert(struct
|
||||
|
||||
if (!sta->dummy || dummy_reinsert) {
|
||||
/* notify driver */
|
||||
- if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
- sdata = container_of(sdata->bss,
|
||||
- struct ieee80211_sub_if_data,
|
||||
- u.ap);
|
||||
err = drv_sta_add(local, sdata, &sta->sta);
|
||||
if (err) {
|
||||
if (!async)
|
||||
--- a/net/mac80211/agg-tx.c
|
||||
+++ b/net/mac80211/agg-tx.c
|
||||
@@ -550,7 +550,7 @@ void ieee80211_start_tx_ba_cb(struct iee
|
||||
}
|
||||
|
||||
mutex_lock(&local->sta_mtx);
|
||||
- sta = sta_info_get(sdata, ra);
|
||||
+ sta = sta_info_get_bss(sdata, ra);
|
||||
if (!sta) {
|
||||
mutex_unlock(&local->sta_mtx);
|
||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||
@@ -679,7 +679,7 @@ void ieee80211_stop_tx_ba_cb(struct ieee
|
||||
|
||||
mutex_lock(&local->sta_mtx);
|
||||
|
||||
- sta = sta_info_get(sdata, ra);
|
||||
+ sta = sta_info_get_bss(sdata, ra);
|
||||
if (!sta) {
|
||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||
printk(KERN_DEBUG "Could not find station: %pM\n", ra);
|
||||
--- a/net/mac80211/agg-rx.c
|
||||
+++ b/net/mac80211/agg-rx.c
|
||||
@@ -109,7 +109,7 @@ void ieee80211_stop_rx_ba_session(struct
|
||||
int i;
|
||||
|
||||
rcu_read_lock();
|
||||
- sta = sta_info_get(sdata, addr);
|
||||
+ sta = sta_info_get_bss(sdata, addr);
|
||||
if (!sta) {
|
||||
rcu_read_unlock();
|
||||
return;
|
Loading…
Reference in a new issue