mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-25 21:41:43 +02:00
mac80211: fix aggregation related kernel warnings when using wds
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29296 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
b609c57355
commit
c247f5a905
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 New Issue
Block a user