aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2010-09-24 15:52:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-09-24 15:52:34 -0400
commit29ad2facd47f8e37eab8b156e2c384fa181c8b4a (patch)
tree25d4df186cd631810ff15a8e7d37cb6cdd806cdb
parent6e5c2b4e8addfaab8ef54dedaf7b607e1585c35b (diff)
parentcd87a2d3a33d75a646f1aa1aa2ee5bf712d6f963 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: drivers/net/wireless/ath/ath5k/base.c net/mac80211/main.c
-rw-r--r--MAINTAINERS2
-rw-r--r--drivers/net/wireless/ath/ath5k/base.c4
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_eeprom.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/eeprom.h2
-rw-r--r--drivers/net/wireless/ath/regd.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c5
-rw-r--r--drivers/net/wireless/libertas/if_sdio.c2
-rw-r--r--drivers/net/wireless/p54/txrx.c2
-rw-r--r--net/mac80211/main.c6
-rw-r--r--net/mac80211/rx.c4
-rw-r--r--net/wireless/core.c21
-rw-r--r--net/wireless/wext-compat.c3
-rw-r--r--net/wireless/wext-core.c16
-rw-r--r--net/wireless/wext-priv.c2
14 files changed, 52 insertions, 20 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index e9aec08e575a..6cb1c759eeaa 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4555,7 +4555,7 @@ F: include/linux/preempt.h
4555PRISM54 WIRELESS DRIVER 4555PRISM54 WIRELESS DRIVER
4556M: "Luis R. Rodriguez" <mcgrof@gmail.com> 4556M: "Luis R. Rodriguez" <mcgrof@gmail.com>
4557L: linux-wireless@vger.kernel.org 4557L: linux-wireless@vger.kernel.org
4558W: http://prism54.org 4558W: http://wireless.kernel.org/en/users/Drivers/p54
4559S: Obsolete 4559S: Obsolete
4560F: drivers/net/wireless/prism54/ 4560F: drivers/net/wireless/prism54/
4561 4561
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 504c6d648ecf..95072db0ec21 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -673,6 +673,10 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
673 PCI_DMA_TODEVICE); 673 PCI_DMA_TODEVICE);
674 674
675 rate = ieee80211_get_tx_rate(sc->hw, info); 675 rate = ieee80211_get_tx_rate(sc->hw, info);
676 if (!rate) {
677 ret = -EINVAL;
678 goto err_unmap;
679 }
676 680
677 if (info->flags & IEEE80211_TX_CTL_NO_ACK) 681 if (info->flags & IEEE80211_TX_CTL_NO_ACK)
678 flags |= AR5K_TXDESC_NOACK; 682 flags |= AR5K_TXDESC_NOACK;
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
index e2ae98feb0be..c4182359bee4 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
@@ -797,7 +797,7 @@ static bool ar9300_uncompress_block(struct ath_hw *ah,
797 length = block[it+1]; 797 length = block[it+1];
798 length &= 0xff; 798 length &= 0xff;
799 799
800 if (length > 0 && spot >= 0 && spot+length < mdataSize) { 800 if (length > 0 && spot >= 0 && spot+length <= mdataSize) {
801 ath_print(common, ATH_DBG_EEPROM, 801 ath_print(common, ATH_DBG_EEPROM,
802 "Restore at %d: spot=%d " 802 "Restore at %d: spot=%d "
803 "offset=%d length=%d\n", 803 "offset=%d length=%d\n",
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h
index e583421fcaa6..3030564a0f21 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom.h
+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
@@ -62,7 +62,7 @@
62 62
63#define SD_NO_CTL 0xE0 63#define SD_NO_CTL 0xE0
64#define NO_CTL 0xff 64#define NO_CTL 0xff
65#define CTL_MODE_M 7 65#define CTL_MODE_M 0xf
66#define CTL_11A 0 66#define CTL_11A 0
67#define CTL_11B 1 67#define CTL_11B 1
68#define CTL_11G 2 68#define CTL_11G 2
diff --git a/drivers/net/wireless/ath/regd.h b/drivers/net/wireless/ath/regd.h
index a1c39526161a..345dd9721b41 100644
--- a/drivers/net/wireless/ath/regd.h
+++ b/drivers/net/wireless/ath/regd.h
@@ -31,7 +31,6 @@ enum ctl_group {
31#define NO_CTL 0xff 31#define NO_CTL 0xff
32#define SD_NO_CTL 0xE0 32#define SD_NO_CTL 0xE0
33#define NO_CTL 0xff 33#define NO_CTL 0xff
34#define CTL_MODE_M 7
35#define CTL_11A 0 34#define CTL_11A 0
36#define CTL_11B 1 35#define CTL_11B 1
37#define CTL_11G 2 36#define CTL_11G 2
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 393f02d94c4e..5c568933ce48 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -2736,6 +2736,11 @@ int iwl_force_reset(struct iwl_priv *priv, int mode, bool external)
2736 if (test_bit(STATUS_EXIT_PENDING, &priv->status)) 2736 if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2737 return -EINVAL; 2737 return -EINVAL;
2738 2738
2739 if (test_bit(STATUS_SCANNING, &priv->status)) {
2740 IWL_DEBUG_INFO(priv, "scan in progress.\n");
2741 return -EINVAL;
2742 }
2743
2739 if (mode >= IWL_MAX_FORCE_RESET) { 2744 if (mode >= IWL_MAX_FORCE_RESET) {
2740 IWL_DEBUG_INFO(priv, "invalid reset request.\n"); 2745 IWL_DEBUG_INFO(priv, "invalid reset request.\n");
2741 return -EINVAL; 2746 return -EINVAL;
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index 024e5ca7b7f3..0b3119d9c02c 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -122,7 +122,7 @@ struct if_sdio_card {
122 const char *helper; 122 const char *helper;
123 const char *firmware; 123 const char *firmware;
124 124
125 u8 buffer[65536]; 125 u8 buffer[65536] __attribute__((aligned(4)));
126 126
127 spinlock_t lock; 127 spinlock_t lock;
128 struct if_sdio_packet *packets; 128 struct if_sdio_packet *packets;
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
index 8f67db487f57..76b2318a7dc7 100644
--- a/drivers/net/wireless/p54/txrx.c
+++ b/drivers/net/wireless/p54/txrx.c
@@ -446,7 +446,7 @@ static void p54_rx_frame_sent(struct p54_common *priv, struct sk_buff *skb)
446 } 446 }
447 447
448 if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) && 448 if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) &&
449 (!payload->status)) 449 !(payload->status & P54_TX_FAILED))
450 info->flags |= IEEE80211_TX_STAT_ACK; 450 info->flags |= IEEE80211_TX_STAT_ACK;
451 if (payload->status & P54_TX_PSM_CANCELLED) 451 if (payload->status & P54_TX_PSM_CANCELLED)
452 info->flags |= IEEE80211_TX_STAT_TX_FILTERED; 452 info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 18fdeca43d98..7c8542627351 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -868,6 +868,12 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)
868 868
869 rtnl_unlock(); 869 rtnl_unlock();
870 870
871 /*
872 * Now all work items will be gone, but the
873 * timer might still be armed, so delete it
874 */
875 del_timer_sync(&local->work_timer);
876
871 cancel_work_sync(&local->restart_work); 877 cancel_work_sync(&local->restart_work);
872 cancel_work_sync(&local->reconfig_filter); 878 cancel_work_sync(&local->reconfig_filter);
873 879
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index c0368152b721..308e502a80eb 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2286,9 +2286,6 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
2286 struct net_device *prev_dev = NULL; 2286 struct net_device *prev_dev = NULL;
2287 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 2287 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2288 2288
2289 if (status->flag & RX_FLAG_INTERNAL_CMTR)
2290 goto out_free_skb;
2291
2292 if (skb_headroom(skb) < sizeof(*rthdr) && 2289 if (skb_headroom(skb) < sizeof(*rthdr) &&
2293 pskb_expand_head(skb, sizeof(*rthdr), 0, GFP_ATOMIC)) 2290 pskb_expand_head(skb, sizeof(*rthdr), 0, GFP_ATOMIC))
2294 goto out_free_skb; 2291 goto out_free_skb;
@@ -2347,7 +2344,6 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
2347 } else 2344 } else
2348 goto out_free_skb; 2345 goto out_free_skb;
2349 2346
2350 status->flag |= RX_FLAG_INTERNAL_CMTR;
2351 return; 2347 return;
2352 2348
2353 out_free_skb: 2349 out_free_skb:
diff --git a/net/wireless/core.c b/net/wireless/core.c
index ff9615a7ee7a..9c21ebf9780e 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -480,12 +480,10 @@ int wiphy_register(struct wiphy *wiphy)
480 mutex_lock(&cfg80211_mutex); 480 mutex_lock(&cfg80211_mutex);
481 481
482 res = device_add(&rdev->wiphy.dev); 482 res = device_add(&rdev->wiphy.dev);
483 if (res) 483 if (res) {
484 goto out_unlock; 484 mutex_unlock(&cfg80211_mutex);
485 485 return res;
486 res = rfkill_register(rdev->rfkill); 486 }
487 if (res)
488 goto out_rm_dev;
489 487
490 /* set up regulatory info */ 488 /* set up regulatory info */
491 wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE); 489 wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE);
@@ -514,13 +512,18 @@ int wiphy_register(struct wiphy *wiphy)
514 cfg80211_debugfs_rdev_add(rdev); 512 cfg80211_debugfs_rdev_add(rdev);
515 mutex_unlock(&cfg80211_mutex); 513 mutex_unlock(&cfg80211_mutex);
516 514
515 /*
516 * due to a locking dependency this has to be outside of the
517 * cfg80211_mutex lock
518 */
519 res = rfkill_register(rdev->rfkill);
520 if (res)
521 goto out_rm_dev;
522
517 return 0; 523 return 0;
518 524
519out_rm_dev: 525out_rm_dev:
520 device_del(&rdev->wiphy.dev); 526 device_del(&rdev->wiphy.dev);
521
522out_unlock:
523 mutex_unlock(&cfg80211_mutex);
524 return res; 527 return res;
525} 528}
526EXPORT_SYMBOL(wiphy_register); 529EXPORT_SYMBOL(wiphy_register);
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index bb5e0a5ecfa1..7e5c3a45f811 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -1420,6 +1420,9 @@ int cfg80211_wext_giwessid(struct net_device *dev,
1420{ 1420{
1421 struct wireless_dev *wdev = dev->ieee80211_ptr; 1421 struct wireless_dev *wdev = dev->ieee80211_ptr;
1422 1422
1423 data->flags = 0;
1424 data->length = 0;
1425
1423 switch (wdev->iftype) { 1426 switch (wdev->iftype) {
1424 case NL80211_IFTYPE_ADHOC: 1427 case NL80211_IFTYPE_ADHOC:
1425 return cfg80211_ibss_wext_giwessid(dev, info, data, ssid); 1428 return cfg80211_ibss_wext_giwessid(dev, info, data, ssid);
diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c
index 40385936e286..dc675a3daa3d 100644
--- a/net/wireless/wext-core.c
+++ b/net/wireless/wext-core.c
@@ -782,6 +782,22 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,
782 } 782 }
783 } 783 }
784 784
785 if (IW_IS_GET(cmd) && !(descr->flags & IW_DESCR_FLAG_NOMAX)) {
786 /*
787 * If this is a GET, but not NOMAX, it means that the extra
788 * data is not bounded by userspace, but by max_tokens. Thus
789 * set the length to max_tokens. This matches the extra data
790 * allocation.
791 * The driver should fill it with the number of tokens it
792 * provided, and it may check iwp->length rather than having
793 * knowledge of max_tokens. If the driver doesn't change the
794 * iwp->length, this ioctl just copies back max_token tokens
795 * filled with zeroes. Hopefully the driver isn't claiming
796 * them to be valid data.
797 */
798 iwp->length = descr->max_tokens;
799 }
800
785 err = handler(dev, info, (union iwreq_data *) iwp, extra); 801 err = handler(dev, info, (union iwreq_data *) iwp, extra);
786 802
787 iwp->length += essid_compat; 803 iwp->length += essid_compat;
diff --git a/net/wireless/wext-priv.c b/net/wireless/wext-priv.c
index 3feb28e41c53..674d426a9d24 100644
--- a/net/wireless/wext-priv.c
+++ b/net/wireless/wext-priv.c
@@ -152,7 +152,7 @@ static int ioctl_private_iw_point(struct iw_point *iwp, unsigned int cmd,
152 } else if (!iwp->pointer) 152 } else if (!iwp->pointer)
153 return -EFAULT; 153 return -EFAULT;
154 154
155 extra = kmalloc(extra_size, GFP_KERNEL); 155 extra = kzalloc(extra_size, GFP_KERNEL);
156 if (!extra) 156 if (!extra)
157 return -ENOMEM; 157 return -ENOMEM;
158 158