aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2011-02-18 17:03:41 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-02-18 17:03:41 -0500
commitb67afe7f43afd2f5cd98798993561920c1684c12 (patch)
treee45a0e41c91a1d199fd865b011ed0d25f5497bb9 /net
parentdb28569adc692d9fb8a2d2d8e7ebab7fd5481f10 (diff)
parent28bec7b845e10b68e6ba1ade5de0fc566690fc61 (diff)
Merge ssh://master.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: drivers/bluetooth/ath3k.c drivers/bluetooth/btusb.c
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/rfcomm/tty.c2
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/ieee80211_i.h2
-rw-r--r--net/mac80211/mlme.c6
-rw-r--r--net/mac80211/status.c7
-rw-r--r--net/mac80211/tx.c2
-rw-r--r--net/mac80211/util.c2
7 files changed, 20 insertions, 3 deletions
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index 2575c2db6404..d7b9af4703d0 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -727,7 +727,9 @@ static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
727 break; 727 break;
728 } 728 }
729 729
730 tty_unlock();
730 schedule(); 731 schedule();
732 tty_lock();
731 } 733 }
732 set_current_state(TASK_RUNNING); 734 set_current_state(TASK_RUNNING);
733 remove_wait_queue(&dev->wait, &wait); 735 remove_wait_queue(&dev->wait, &wait);
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index f7a1f08ec3e0..140503d4c97a 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1838,6 +1838,7 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
1838 *cookie ^= 2; 1838 *cookie ^= 2;
1839 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN; 1839 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN;
1840 local->hw_roc_skb = skb; 1840 local->hw_roc_skb = skb;
1841 local->hw_roc_skb_for_status = skb;
1841 mutex_unlock(&local->mtx); 1842 mutex_unlock(&local->mtx);
1842 1843
1843 return 0; 1844 return 0;
@@ -1892,6 +1893,7 @@ static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
1892 if (ret == 0) { 1893 if (ret == 0) {
1893 kfree_skb(local->hw_roc_skb); 1894 kfree_skb(local->hw_roc_skb);
1894 local->hw_roc_skb = NULL; 1895 local->hw_roc_skb = NULL;
1896 local->hw_roc_skb_for_status = NULL;
1895 } 1897 }
1896 1898
1897 mutex_unlock(&local->mtx); 1899 mutex_unlock(&local->mtx);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index bb63878d865e..0a570a111a84 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -951,7 +951,7 @@ struct ieee80211_local {
951 951
952 struct ieee80211_channel *hw_roc_channel; 952 struct ieee80211_channel *hw_roc_channel;
953 struct net_device *hw_roc_dev; 953 struct net_device *hw_roc_dev;
954 struct sk_buff *hw_roc_skb; 954 struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status;
955 struct work_struct hw_roc_start, hw_roc_done; 955 struct work_struct hw_roc_start, hw_roc_done;
956 enum nl80211_channel_type hw_roc_channel_type; 956 enum nl80211_channel_type hw_roc_channel_type;
957 unsigned int hw_roc_duration; 957 unsigned int hw_roc_duration;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index d89e87866e51..7b3f9df725bd 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1071,6 +1071,12 @@ void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
1071 if (is_multicast_ether_addr(hdr->addr1)) 1071 if (is_multicast_ether_addr(hdr->addr1))
1072 return; 1072 return;
1073 1073
1074 /*
1075 * In case we receive frames after disassociation.
1076 */
1077 if (!sdata->u.mgd.associated)
1078 return;
1079
1074 ieee80211_sta_reset_conn_monitor(sdata); 1080 ieee80211_sta_reset_conn_monitor(sdata);
1075} 1081}
1076 1082
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index ffb0de9bc2fa..010a559bd872 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -327,6 +327,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
327 327
328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { 328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
329 struct ieee80211_work *wk; 329 struct ieee80211_work *wk;
330 u64 cookie = (unsigned long)skb;
330 331
331 rcu_read_lock(); 332 rcu_read_lock();
332 list_for_each_entry_rcu(wk, &local->work_list, list) { 333 list_for_each_entry_rcu(wk, &local->work_list, list) {
@@ -338,8 +339,12 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
338 break; 339 break;
339 } 340 }
340 rcu_read_unlock(); 341 rcu_read_unlock();
342 if (local->hw_roc_skb_for_status == skb) {
343 cookie = local->hw_roc_cookie ^ 2;
344 local->hw_roc_skb_for_status = NULL;
345 }
341 cfg80211_mgmt_tx_status( 346 cfg80211_mgmt_tx_status(
342 skb->dev, (unsigned long) skb, skb->data, skb->len, 347 skb->dev, cookie, skb->data, skb->len,
343 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC); 348 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC);
344 } 349 }
345 350
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index d0f91d74eaf0..34edf7f22b0e 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1550,7 +1550,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
1550 skb_orphan(skb); 1550 skb_orphan(skb);
1551 } 1551 }
1552 1552
1553 if (skb_header_cloned(skb)) 1553 if (skb_cloned(skb))
1554 I802_DEBUG_INC(local->tx_expand_skb_head_cloned); 1554 I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
1555 else if (head_need || tail_need) 1555 else if (head_need || tail_need)
1556 I802_DEBUG_INC(local->tx_expand_skb_head); 1556 I802_DEBUG_INC(local->tx_expand_skb_head);
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 26fd5d29af7f..556647a910ac 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1204,7 +1204,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
1204 switch (sdata->vif.type) { 1204 switch (sdata->vif.type) {
1205 case NL80211_IFTYPE_STATION: 1205 case NL80211_IFTYPE_STATION:
1206 changed |= BSS_CHANGED_ASSOC; 1206 changed |= BSS_CHANGED_ASSOC;
1207 mutex_lock(&sdata->u.mgd.mtx);
1207 ieee80211_bss_info_change_notify(sdata, changed); 1208 ieee80211_bss_info_change_notify(sdata, changed);
1209 mutex_unlock(&sdata->u.mgd.mtx);
1208 break; 1210 break;
1209 case NL80211_IFTYPE_ADHOC: 1211 case NL80211_IFTYPE_ADHOC:
1210 changed |= BSS_CHANGED_IBSS; 1212 changed |= BSS_CHANGED_IBSS;