diff options
| -rw-r--r-- | MAINTAINERS | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/base.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/eeprom.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/regd.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/libertas/if_sdio.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/p54/txrx.c | 2 | ||||
| -rw-r--r-- | net/mac80211/main.c | 6 | ||||
| -rw-r--r-- | net/wireless/core.c | 21 | ||||
| -rw-r--r-- | net/wireless/wext-compat.c | 3 | ||||
| -rw-r--r-- | net/wireless/wext-core.c | 16 |
11 files changed, 46 insertions, 15 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 44620aebb369..8e85429d3bb0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -4549,7 +4549,7 @@ F: include/linux/preempt.h | |||
| 4549 | PRISM54 WIRELESS DRIVER | 4549 | PRISM54 WIRELESS DRIVER |
| 4550 | M: "Luis R. Rodriguez" <mcgrof@gmail.com> | 4550 | M: "Luis R. Rodriguez" <mcgrof@gmail.com> |
| 4551 | L: linux-wireless@vger.kernel.org | 4551 | L: linux-wireless@vger.kernel.org |
| 4552 | W: http://prism54.org | 4552 | W: http://wireless.kernel.org/en/users/Drivers/p54 |
| 4553 | S: Obsolete | 4553 | S: Obsolete |
| 4554 | F: drivers/net/wireless/prism54/ | 4554 | F: drivers/net/wireless/prism54/ |
| 4555 | 4555 | ||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index 373dcfec689c..d77ce9906b6c 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
| @@ -1327,6 +1327,10 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, | |||
| 1327 | PCI_DMA_TODEVICE); | 1327 | PCI_DMA_TODEVICE); |
| 1328 | 1328 | ||
| 1329 | rate = ieee80211_get_tx_rate(sc->hw, info); | 1329 | rate = ieee80211_get_tx_rate(sc->hw, info); |
| 1330 | if (!rate) { | ||
| 1331 | ret = -EINVAL; | ||
| 1332 | goto err_unmap; | ||
| 1333 | } | ||
| 1330 | 1334 | ||
| 1331 | if (info->flags & IEEE80211_TX_CTL_NO_ACK) | 1335 | if (info->flags & IEEE80211_TX_CTL_NO_ACK) |
| 1332 | flags |= AR5K_TXDESC_NOACK; | 1336 | 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 b883b174385b..057fb69ddf7f 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 7f48df1e2903..0b09db0f8e7d 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/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 6e71346a7550..382f2371a1ab 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c | |||
| @@ -126,7 +126,7 @@ struct if_sdio_card { | |||
| 126 | const char *helper; | 126 | const char *helper; |
| 127 | const char *firmware; | 127 | const char *firmware; |
| 128 | 128 | ||
| 129 | u8 buffer[65536]; | 129 | u8 buffer[65536] __attribute__((aligned(4))); |
| 130 | 130 | ||
| 131 | spinlock_t lock; | 131 | spinlock_t lock; |
| 132 | struct if_sdio_packet *packets; | 132 | struct if_sdio_packet *packets; |
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c index 173aec3d6e7e..0e937dc0c9c4 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 798a91b100cc..ded5c3843e06 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
| @@ -732,6 +732,12 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw) | |||
| 732 | 732 | ||
| 733 | rtnl_unlock(); | 733 | rtnl_unlock(); |
| 734 | 734 | ||
| 735 | /* | ||
| 736 | * Now all work items will be gone, but the | ||
| 737 | * timer might still be armed, so delete it | ||
| 738 | */ | ||
| 739 | del_timer_sync(&local->work_timer); | ||
| 740 | |||
| 735 | cancel_work_sync(&local->reconfig_filter); | 741 | cancel_work_sync(&local->reconfig_filter); |
| 736 | 742 | ||
| 737 | ieee80211_clear_tx_pending(local); | 743 | ieee80211_clear_tx_pending(local); |
diff --git a/net/wireless/core.c b/net/wireless/core.c index 541e2fff5e9c..d6d046b9f6f2 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
| @@ -475,12 +475,10 @@ int wiphy_register(struct wiphy *wiphy) | |||
| 475 | mutex_lock(&cfg80211_mutex); | 475 | mutex_lock(&cfg80211_mutex); |
| 476 | 476 | ||
| 477 | res = device_add(&rdev->wiphy.dev); | 477 | res = device_add(&rdev->wiphy.dev); |
| 478 | if (res) | 478 | if (res) { |
| 479 | goto out_unlock; | 479 | mutex_unlock(&cfg80211_mutex); |
| 480 | 480 | return res; | |
| 481 | res = rfkill_register(rdev->rfkill); | 481 | } |
| 482 | if (res) | ||
| 483 | goto out_rm_dev; | ||
| 484 | 482 | ||
| 485 | /* set up regulatory info */ | 483 | /* set up regulatory info */ |
| 486 | wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE); | 484 | wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE); |
| @@ -509,13 +507,18 @@ int wiphy_register(struct wiphy *wiphy) | |||
| 509 | cfg80211_debugfs_rdev_add(rdev); | 507 | cfg80211_debugfs_rdev_add(rdev); |
| 510 | mutex_unlock(&cfg80211_mutex); | 508 | mutex_unlock(&cfg80211_mutex); |
| 511 | 509 | ||
| 510 | /* | ||
| 511 | * due to a locking dependency this has to be outside of the | ||
| 512 | * cfg80211_mutex lock | ||
| 513 | */ | ||
| 514 | res = rfkill_register(rdev->rfkill); | ||
| 515 | if (res) | ||
| 516 | goto out_rm_dev; | ||
| 517 | |||
| 512 | return 0; | 518 | return 0; |
| 513 | 519 | ||
| 514 | out_rm_dev: | 520 | out_rm_dev: |
| 515 | device_del(&rdev->wiphy.dev); | 521 | device_del(&rdev->wiphy.dev); |
| 516 | |||
| 517 | out_unlock: | ||
| 518 | mutex_unlock(&cfg80211_mutex); | ||
| 519 | return res; | 522 | return res; |
| 520 | } | 523 | } |
| 521 | EXPORT_SYMBOL(wiphy_register); | 524 | EXPORT_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 0ef17bc42bac..8f5116f5af19 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; |
