diff options
author | John W. Linville <linville@tuxdriver.com> | 2011-02-18 17:03:41 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-02-18 17:03:41 -0500 |
commit | b67afe7f43afd2f5cd98798993561920c1684c12 (patch) | |
tree | e45a0e41c91a1d199fd865b011ed0d25f5497bb9 /net | |
parent | db28569adc692d9fb8a2d2d8e7ebab7fd5481f10 (diff) | |
parent | 28bec7b845e10b68e6ba1ade5de0fc566690fc61 (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.c | 2 | ||||
-rw-r--r-- | net/mac80211/cfg.c | 2 | ||||
-rw-r--r-- | net/mac80211/ieee80211_i.h | 2 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 6 | ||||
-rw-r--r-- | net/mac80211/status.c | 7 | ||||
-rw-r--r-- | net/mac80211/tx.c | 2 | ||||
-rw-r--r-- | net/mac80211/util.c | 2 |
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; |