Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'master-2012-10-08' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless

John W. Linville says:

====================
Here is a batch of fixes intended for 3.7...

Amitkumar Karwar provides a couple of mwifiex fixes to correctly
report some reason codes for certain connection failures. He also
provides a fix to cleanup after a scanning failure. Bing Zhao rounds
that out with another mwifiex scanning fix.

Daniel Golle gives us a fix for a copy/paste error in rt2x00.

Felix Fietkau brings a couple of ath9k fixes related to suspend/resume,
and a couple of fixes to prevent memory leaks in ath9k and mac80211.

Ronald Wahl sends a carl9170 fix for a sleep in softirq context.

Thomas Pedersen reorders some code to prevent drv_get_tsf from being
called while holding a spinlock, now that it can sleep.

Finally, Wei Yongjun prevents a NULL pointer dereference in the
ath5k driver.

Please let me know if there are problems!
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+151 -106
+2 -1
drivers/net/wireless/ath/ath5k/base.c
··· 1804 1804 { 1805 1805 int ret; 1806 1806 struct ath5k_hw *ah = hw->priv; 1807 - struct ath5k_vif *avf = (void *)vif->drv_priv; 1807 + struct ath5k_vif *avf; 1808 1808 struct sk_buff *skb; 1809 1809 1810 1810 if (WARN_ON(!vif)) { ··· 1819 1819 goto out; 1820 1820 } 1821 1821 1822 + avf = (void *)vif->drv_priv; 1822 1823 ath5k_txbuf_free_skb(ah, avf->bbuf); 1823 1824 avf->bbuf->skb = skb; 1824 1825 ret = ath5k_beacon_setup(ah, avf->bbuf);
+1 -1
drivers/net/wireless/ath/ath9k/beacon.c
··· 120 120 121 121 if (ath_tx_start(hw, skb, &txctl) != 0) { 122 122 ath_dbg(common, XMIT, "CABQ TX failed\n"); 123 - dev_kfree_skb_any(skb); 123 + ieee80211_free_txskb(hw, skb); 124 124 } 125 125 } 126 126
+5
drivers/net/wireless/ath/ath9k/hw.c
··· 1450 1450 REG_WRITE(ah, AR_RTC_FORCE_WAKE, 1451 1451 AR_RTC_FORCE_WAKE_EN | AR_RTC_FORCE_WAKE_ON_INT); 1452 1452 1453 + if (!ah->reset_power_on) 1454 + type = ATH9K_RESET_POWER_ON; 1455 + 1453 1456 switch (type) { 1454 1457 case ATH9K_RESET_POWER_ON: 1455 1458 ret = ath9k_hw_set_reset_power_on(ah); 1459 + if (!ret) 1460 + ah->reset_power_on = true; 1456 1461 break; 1457 1462 case ATH9K_RESET_WARM: 1458 1463 case ATH9K_RESET_COLD:
+1
drivers/net/wireless/ath/ath9k/hw.h
··· 741 741 u32 rfkill_polarity; 742 742 u32 ah_flags; 743 743 744 + bool reset_power_on; 744 745 bool htc_reset_init; 745 746 746 747 enum nl80211_iftype opmode;
+5 -10
drivers/net/wireless/ath/ath9k/main.c
··· 639 639 ath_err(common, 640 640 "Unable to reset hardware; reset status %d (freq %u MHz)\n", 641 641 r, curchan->center_freq); 642 - spin_unlock_bh(&sc->sc_pcu_lock); 643 - goto mutex_unlock; 642 + ah->reset_power_on = false; 644 643 } 645 644 646 645 /* Setup our intr mask. */ ··· 664 665 clear_bit(SC_OP_INVALID, &sc->sc_flags); 665 666 sc->sc_ah->is_monitoring = false; 666 667 667 - if (!ath_complete_reset(sc, false)) { 668 - r = -EIO; 669 - spin_unlock_bh(&sc->sc_pcu_lock); 670 - goto mutex_unlock; 671 - } 668 + if (!ath_complete_reset(sc, false)) 669 + ah->reset_power_on = false; 672 670 673 671 if (ah->led_pin >= 0) { 674 672 ath9k_hw_cfg_output(ah, ah->led_pin, ··· 684 688 if (ah->caps.pcie_lcr_extsync_en && common->bus_ops->extn_synch_en) 685 689 common->bus_ops->extn_synch_en(common); 686 690 687 - mutex_unlock: 688 691 mutex_unlock(&sc->mutex); 689 692 690 693 ath9k_ps_restore(sc); 691 694 692 - return r; 695 + return 0; 693 696 } 694 697 695 698 static void ath9k_tx(struct ieee80211_hw *hw, ··· 765 770 766 771 return; 767 772 exit: 768 - dev_kfree_skb_any(skb); 773 + ieee80211_free_txskb(hw, skb); 769 774 } 770 775 771 776 static void ath9k_stop(struct ieee80211_hw *hw)
+7
drivers/net/wireless/ath/ath9k/pci.c
··· 324 324 static int ath_pci_resume(struct device *device) 325 325 { 326 326 struct pci_dev *pdev = to_pci_dev(device); 327 + struct ieee80211_hw *hw = pci_get_drvdata(pdev); 328 + struct ath_softc *sc = hw->priv; 329 + struct ath_hw *ah = sc->sc_ah; 330 + struct ath_common *common = ath9k_hw_common(ah); 327 331 u32 val; 328 332 329 333 /* ··· 338 334 pci_read_config_dword(pdev, 0x40, &val); 339 335 if ((val & 0x0000ff00) != 0) 340 336 pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); 337 + 338 + ath_pci_aspm_init(common); 339 + ah->reset_power_on = false; 341 340 342 341 return 0; 343 342 }
+29 -24
drivers/net/wireless/ath/ath9k/xmit.c
··· 66 66 static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, 67 67 struct ath_txq *txq, 68 68 struct ath_atx_tid *tid, 69 - struct sk_buff *skb, 70 - bool dequeue); 69 + struct sk_buff *skb); 71 70 72 71 enum { 73 72 MCS_HT20, ··· 175 176 fi = get_frame_info(skb); 176 177 bf = fi->bf; 177 178 178 - if (bf && fi->retries) { 179 + if (!bf) { 180 + bf = ath_tx_setup_buffer(sc, txq, tid, skb); 181 + if (!bf) { 182 + ieee80211_free_txskb(sc->hw, skb); 183 + continue; 184 + } 185 + } 186 + 187 + if (fi->retries) { 179 188 list_add_tail(&bf->list, &bf_head); 180 189 ath_tx_update_baw(sc, tid, bf->bf_state.seqno); 181 190 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); ··· 792 785 fi = get_frame_info(skb); 793 786 bf = fi->bf; 794 787 if (!fi->bf) 795 - bf = ath_tx_setup_buffer(sc, txq, tid, skb, true); 788 + bf = ath_tx_setup_buffer(sc, txq, tid, skb); 796 789 797 - if (!bf) 790 + if (!bf) { 791 + __skb_unlink(skb, &tid->buf_q); 792 + ieee80211_free_txskb(sc->hw, skb); 798 793 continue; 794 + } 799 795 800 796 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; 801 797 seqno = bf->bf_state.seqno; ··· 1741 1731 return; 1742 1732 } 1743 1733 1744 - bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false); 1745 - if (!bf) 1734 + bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); 1735 + if (!bf) { 1736 + ieee80211_free_txskb(sc->hw, skb); 1746 1737 return; 1738 + } 1747 1739 1748 1740 bf->bf_state.bf_type = BUF_AMPDU; 1749 1741 INIT_LIST_HEAD(&bf_head); ··· 1769 1757 struct ath_buf *bf; 1770 1758 1771 1759 bf = fi->bf; 1772 - if (!bf) 1773 - bf = ath_tx_setup_buffer(sc, txq, tid, skb, false); 1774 - 1775 - if (!bf) 1776 - return; 1777 1760 1778 1761 INIT_LIST_HEAD(&bf_head); 1779 1762 list_add_tail(&bf->list, &bf_head); ··· 1846 1839 static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, 1847 1840 struct ath_txq *txq, 1848 1841 struct ath_atx_tid *tid, 1849 - struct sk_buff *skb, 1850 - bool dequeue) 1842 + struct sk_buff *skb) 1851 1843 { 1852 1844 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 1853 1845 struct ath_frame_info *fi = get_frame_info(skb); ··· 1858 1852 bf = ath_tx_get_buffer(sc); 1859 1853 if (!bf) { 1860 1854 ath_dbg(common, XMIT, "TX buffers are full\n"); 1861 - goto error; 1855 + return NULL; 1862 1856 } 1863 1857 1864 1858 ATH_TXBUF_RESET(bf); ··· 1887 1881 ath_err(ath9k_hw_common(sc->sc_ah), 1888 1882 "dma_mapping_error() on TX\n"); 1889 1883 ath_tx_return_buffer(sc, bf); 1890 - goto error; 1884 + return NULL; 1891 1885 } 1892 1886 1893 1887 fi->bf = bf; 1894 1888 1895 1889 return bf; 1896 - 1897 - error: 1898 - if (dequeue) 1899 - __skb_unlink(skb, &tid->buf_q); 1900 - dev_kfree_skb_any(skb); 1901 - return NULL; 1902 1890 } 1903 1891 1904 1892 /* FIXME: tx power */ ··· 1921 1921 */ 1922 1922 ath_tx_send_ampdu(sc, tid, skb, txctl); 1923 1923 } else { 1924 - bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false); 1925 - if (!bf) 1924 + bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb); 1925 + if (!bf) { 1926 + if (txctl->paprd) 1927 + dev_kfree_skb_any(skb); 1928 + else 1929 + ieee80211_free_txskb(sc->hw, skb); 1926 1930 return; 1931 + } 1927 1932 1928 1933 bf->bf_state.bfs_paprd = txctl->paprd; 1929 1934
+1
drivers/net/wireless/ath/carl9170/carl9170.h
··· 303 303 unsigned long queue_stop_timeout[__AR9170_NUM_TXQ]; 304 304 unsigned long max_queue_stop_timeout[__AR9170_NUM_TXQ]; 305 305 bool needs_full_reset; 306 + bool force_usb_reset; 306 307 atomic_t pending_restarts; 307 308 308 309 /* interface mode settings */
+14 -15
drivers/net/wireless/ath/carl9170/main.c
··· 465 465 { 466 466 struct ar9170 *ar = container_of(work, struct ar9170, 467 467 restart_work); 468 - int err; 468 + int err = -EIO; 469 469 470 470 ar->usedkeys = 0; 471 471 ar->filter_state = 0; 472 472 carl9170_cancel_worker(ar); 473 473 474 474 mutex_lock(&ar->mutex); 475 - err = carl9170_usb_restart(ar); 476 - if (net_ratelimit()) { 477 - if (err) { 478 - dev_err(&ar->udev->dev, "Failed to restart device " 479 - " (%d).\n", err); 480 - } else { 481 - dev_info(&ar->udev->dev, "device restarted " 482 - "successfully.\n"); 475 + if (!ar->force_usb_reset) { 476 + err = carl9170_usb_restart(ar); 477 + if (net_ratelimit()) { 478 + if (err) 479 + dev_err(&ar->udev->dev, "Failed to restart device (%d).\n", err); 480 + else 481 + dev_info(&ar->udev->dev, "device restarted successfully.\n"); 483 482 } 484 483 } 485 - 486 484 carl9170_zap_queues(ar); 487 485 mutex_unlock(&ar->mutex); 488 - if (!err) { 486 + 487 + if (!err && !ar->force_usb_reset) { 489 488 ar->restart_counter++; 490 489 atomic_set(&ar->pending_restarts, 0); 491 490 ··· 525 526 if (!ar->registered) 526 527 return; 527 528 528 - if (IS_ACCEPTING_CMD(ar) && !ar->needs_full_reset) 529 - ieee80211_queue_work(ar->hw, &ar->restart_work); 530 - else 531 - carl9170_usb_reset(ar); 529 + if (!IS_ACCEPTING_CMD(ar) || ar->needs_full_reset) 530 + ar->force_usb_reset = true; 531 + 532 + ieee80211_queue_work(ar->hw, &ar->restart_work); 532 533 533 534 /* 534 535 * At this point, the device instance might have vanished/disabled.
+21 -6
drivers/net/wireless/mwifiex/cfg80211.c
··· 1596 1596 } 1597 1597 } 1598 1598 1599 - if (mwifiex_bss_start(priv, bss, &req_ssid)) 1600 - return -EFAULT; 1599 + ret = mwifiex_bss_start(priv, bss, &req_ssid); 1600 + if (ret) 1601 + return ret; 1601 1602 1602 1603 if (mode == NL80211_IFTYPE_ADHOC) { 1603 1604 /* Inform the BSS information to kernel, otherwise ··· 1653 1652 "info: association to bssid %pM failed\n", 1654 1653 priv->cfg_bssid); 1655 1654 memset(priv->cfg_bssid, 0, ETH_ALEN); 1655 + 1656 + if (ret > 0) 1657 + cfg80211_connect_result(priv->netdev, priv->cfg_bssid, 1658 + NULL, 0, NULL, 0, ret, 1659 + GFP_KERNEL); 1660 + else 1661 + cfg80211_connect_result(priv->netdev, priv->cfg_bssid, 1662 + NULL, 0, NULL, 0, 1663 + WLAN_STATUS_UNSPECIFIED_FAILURE, 1664 + GFP_KERNEL); 1656 1665 } 1657 1666 1658 - return ret; 1667 + return 0; 1659 1668 } 1660 1669 1661 1670 /* ··· 1813 1802 { 1814 1803 struct net_device *dev = request->wdev->netdev; 1815 1804 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); 1816 - int i, offset; 1805 + int i, offset, ret; 1817 1806 struct ieee80211_channel *chan; 1818 1807 struct ieee_types_header *ie; 1819 1808 ··· 1866 1855 1867 1856 priv->user_scan_cfg->chan_list[i].scan_time = 0; 1868 1857 } 1869 - if (mwifiex_scan_networks(priv, priv->user_scan_cfg)) 1870 - return -EFAULT; 1858 + 1859 + ret = mwifiex_scan_networks(priv, priv->user_scan_cfg); 1860 + if (ret) { 1861 + dev_err(priv->adapter->dev, "scan failed: %d\n", ret); 1862 + return ret; 1863 + } 1871 1864 1872 1865 if (request->ie && request->ie_len) { 1873 1866 for (i = 0; i < MWIFIEX_MAX_VSIE_NUM; i++) {
+4 -2
drivers/net/wireless/mwifiex/join.c
··· 1180 1180 struct mwifiex_adapter *adapter = priv->adapter; 1181 1181 struct host_cmd_ds_802_11_ad_hoc_result *adhoc_result; 1182 1182 struct mwifiex_bssdescriptor *bss_desc; 1183 + u16 reason_code; 1183 1184 1184 1185 adhoc_result = &resp->params.adhoc_result; 1185 1186 1186 1187 bss_desc = priv->attempted_bss_desc; 1187 1188 1188 1189 /* Join result code 0 --> SUCCESS */ 1189 - if (le16_to_cpu(resp->result)) { 1190 + reason_code = le16_to_cpu(resp->result); 1191 + if (reason_code) { 1190 1192 dev_err(priv->adapter->dev, "ADHOC_RESP: failed\n"); 1191 1193 if (priv->media_connected) 1192 - mwifiex_reset_connect_state(priv); 1194 + mwifiex_reset_connect_state(priv, reason_code); 1193 1195 1194 1196 memset(&priv->curr_bss_params.bss_descriptor, 1195 1197 0x00, sizeof(struct mwifiex_bssdescriptor));
+1 -1
drivers/net/wireless/mwifiex/main.h
··· 847 847 struct mwifiex_bssdescriptor *bss_desc); 848 848 int mwifiex_ret_802_11_associate(struct mwifiex_private *priv, 849 849 struct host_cmd_ds_command *resp); 850 - void mwifiex_reset_connect_state(struct mwifiex_private *priv); 850 + void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason); 851 851 u8 mwifiex_band_to_radio_type(u8 band); 852 852 int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac); 853 853 int mwifiex_adhoc_start(struct mwifiex_private *priv,
+21 -17
drivers/net/wireless/mwifiex/scan.c
··· 1296 1296 int mwifiex_scan_networks(struct mwifiex_private *priv, 1297 1297 const struct mwifiex_user_scan_cfg *user_scan_in) 1298 1298 { 1299 - int ret = 0; 1299 + int ret; 1300 1300 struct mwifiex_adapter *adapter = priv->adapter; 1301 1301 struct cmd_ctrl_node *cmd_node; 1302 1302 union mwifiex_scan_cmd_config_tlv *scan_cfg_out; ··· 1309 1309 unsigned long flags; 1310 1310 1311 1311 if (adapter->scan_processing) { 1312 - dev_dbg(adapter->dev, "cmd: Scan already in process...\n"); 1313 - return ret; 1312 + dev_err(adapter->dev, "cmd: Scan already in process...\n"); 1313 + return -EBUSY; 1314 + } 1315 + 1316 + if (priv->scan_block) { 1317 + dev_err(adapter->dev, 1318 + "cmd: Scan is blocked during association...\n"); 1319 + return -EBUSY; 1314 1320 } 1315 1321 1316 1322 spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); 1317 1323 adapter->scan_processing = true; 1318 1324 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); 1319 1325 1320 - if (priv->scan_block) { 1321 - dev_dbg(adapter->dev, 1322 - "cmd: Scan is blocked during association...\n"); 1323 - return ret; 1324 - } 1325 - 1326 1326 scan_cfg_out = kzalloc(sizeof(union mwifiex_scan_cmd_config_tlv), 1327 1327 GFP_KERNEL); 1328 1328 if (!scan_cfg_out) { 1329 1329 dev_err(adapter->dev, "failed to alloc scan_cfg_out\n"); 1330 - return -ENOMEM; 1330 + ret = -ENOMEM; 1331 + goto done; 1331 1332 } 1332 1333 1333 1334 buf_size = sizeof(struct mwifiex_chan_scan_param_set) * ··· 1337 1336 if (!scan_chan_list) { 1338 1337 dev_err(adapter->dev, "failed to alloc scan_chan_list\n"); 1339 1338 kfree(scan_cfg_out); 1340 - return -ENOMEM; 1339 + ret = -ENOMEM; 1340 + goto done; 1341 1341 } 1342 1342 1343 1343 mwifiex_config_scan(priv, user_scan_in, &scan_cfg_out->config, ··· 1366 1364 spin_unlock_irqrestore(&adapter->scan_pending_q_lock, 1367 1365 flags); 1368 1366 } 1369 - } else { 1370 - spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); 1371 - adapter->scan_processing = true; 1372 - spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); 1373 1367 } 1374 1368 1375 1369 kfree(scan_cfg_out); 1376 1370 kfree(scan_chan_list); 1371 + done: 1372 + if (ret) { 1373 + spin_lock_irqsave(&adapter->mwifiex_cmd_lock, flags); 1374 + adapter->scan_processing = false; 1375 + spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); 1376 + } 1377 1377 return ret; 1378 1378 } 1379 1379 ··· 1434 1430 ret = mwifiex_is_network_compatible(priv, bss_desc, 1435 1431 priv->bss_mode); 1436 1432 if (ret) 1437 - dev_err(priv->adapter->dev, "cannot find ssid " 1438 - "%s\n", bss_desc->ssid.ssid); 1433 + dev_err(priv->adapter->dev, 1434 + "Incompatible network settings\n"); 1439 1435 break; 1440 1436 default: 1441 1437 ret = 0;
+2 -2
drivers/net/wireless/mwifiex/sta_cmdresp.c
··· 545 545 if (!memcmp(resp->params.deauth.mac_addr, 546 546 &priv->curr_bss_params.bss_descriptor.mac_address, 547 547 sizeof(resp->params.deauth.mac_addr))) 548 - mwifiex_reset_connect_state(priv); 548 + mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING); 549 549 550 550 return 0; 551 551 } ··· 558 558 static int mwifiex_ret_802_11_ad_hoc_stop(struct mwifiex_private *priv, 559 559 struct host_cmd_ds_command *resp) 560 560 { 561 - mwifiex_reset_connect_state(priv); 561 + mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING); 562 562 return 0; 563 563 } 564 564
+20 -11
drivers/net/wireless/mwifiex/sta_event.c
··· 41 41 * - Sends a disconnect event to upper layers/applications. 42 42 */ 43 43 void 44 - mwifiex_reset_connect_state(struct mwifiex_private *priv) 44 + mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code) 45 45 { 46 46 struct mwifiex_adapter *adapter = priv->adapter; 47 47 ··· 117 117 priv->media_connected = false; 118 118 dev_dbg(adapter->dev, 119 119 "info: successfully disconnected from %pM: reason code %d\n", 120 - priv->cfg_bssid, WLAN_REASON_DEAUTH_LEAVING); 120 + priv->cfg_bssid, reason_code); 121 121 if (priv->bss_mode == NL80211_IFTYPE_STATION) { 122 - cfg80211_disconnected(priv->netdev, WLAN_REASON_DEAUTH_LEAVING, 123 - NULL, 0, GFP_KERNEL); 122 + cfg80211_disconnected(priv->netdev, reason_code, NULL, 0, 123 + GFP_KERNEL); 124 124 } 125 125 memset(priv->cfg_bssid, 0, ETH_ALEN); 126 126 ··· 186 186 struct mwifiex_adapter *adapter = priv->adapter; 187 187 int ret = 0; 188 188 u32 eventcause = adapter->event_cause; 189 - u16 ctrl; 189 + u16 ctrl, reason_code; 190 190 191 191 switch (eventcause) { 192 192 case EVENT_DUMMY_HOST_WAKEUP_SIGNAL: ··· 204 204 case EVENT_DEAUTHENTICATED: 205 205 dev_dbg(adapter->dev, "event: Deauthenticated\n"); 206 206 adapter->dbg.num_event_deauth++; 207 - if (priv->media_connected) 208 - mwifiex_reset_connect_state(priv); 207 + if (priv->media_connected) { 208 + reason_code = 209 + le16_to_cpu(*(__le16 *)adapter->event_body); 210 + mwifiex_reset_connect_state(priv, reason_code); 211 + } 209 212 break; 210 213 211 214 case EVENT_DISASSOCIATED: 212 215 dev_dbg(adapter->dev, "event: Disassociated\n"); 213 216 adapter->dbg.num_event_disassoc++; 214 - if (priv->media_connected) 215 - mwifiex_reset_connect_state(priv); 217 + if (priv->media_connected) { 218 + reason_code = 219 + le16_to_cpu(*(__le16 *)adapter->event_body); 220 + mwifiex_reset_connect_state(priv, reason_code); 221 + } 216 222 break; 217 223 218 224 case EVENT_LINK_LOST: 219 225 dev_dbg(adapter->dev, "event: Link lost\n"); 220 226 adapter->dbg.num_event_link_lost++; 221 - if (priv->media_connected) 222 - mwifiex_reset_connect_state(priv); 227 + if (priv->media_connected) { 228 + reason_code = 229 + le16_to_cpu(*(__le16 *)adapter->event_body); 230 + mwifiex_reset_connect_state(priv, reason_code); 231 + } 223 232 break; 224 233 225 234 case EVENT_PS_SLEEP:
+2 -2
drivers/net/wireless/rt2x00/rt2800lib.c
··· 2252 2252 */ 2253 2253 if (rt2x00_rt(rt2x00dev, RT3352)) { 2254 2254 rt2800_bbp_write(rt2x00dev, 27, 0x0); 2255 - rt2800_bbp_write(rt2x00dev, 62, 0x26 + rt2x00dev->lna_gain); 2255 + rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); 2256 2256 rt2800_bbp_write(rt2x00dev, 27, 0x20); 2257 - rt2800_bbp_write(rt2x00dev, 62, 0x26 + rt2x00dev->lna_gain); 2257 + rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); 2258 2258 } else { 2259 2259 rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); 2260 2260 rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
+1 -2
net/mac80211/mesh_sync.c
··· 56 56 u64 tsfdelta; 57 57 58 58 spin_lock_bh(&ifmsh->sync_offset_lock); 59 - 60 59 if (ifmsh->sync_offset_clockdrift_max < beacon_int_fraction) { 61 60 msync_dbg(sdata, "TBTT : max clockdrift=%lld; adjusting\n", 62 61 (long long) ifmsh->sync_offset_clockdrift_max); ··· 68 69 tsfdelta = -beacon_int_fraction; 69 70 ifmsh->sync_offset_clockdrift_max -= beacon_int_fraction; 70 71 } 72 + spin_unlock_bh(&ifmsh->sync_offset_lock); 71 73 72 74 tsf = drv_get_tsf(local, sdata); 73 75 if (tsf != -1ULL) 74 76 drv_set_tsf(local, sdata, tsf + tsfdelta); 75 - spin_unlock_bh(&ifmsh->sync_offset_lock); 76 77 } 77 78 78 79 static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
+2 -2
net/mac80211/status.c
··· 34 34 skb_queue_len(&local->skb_queue_unreliable); 35 35 while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT && 36 36 (skb = skb_dequeue(&local->skb_queue_unreliable))) { 37 - dev_kfree_skb_irq(skb); 37 + ieee80211_free_txskb(hw, skb); 38 38 tmp--; 39 39 I802_DEBUG_INC(local->tx_status_drop); 40 40 } ··· 159 159 "dropped TX filtered frame, queue_len=%d PS=%d @%lu\n", 160 160 skb_queue_len(&sta->tx_filtered[ac]), 161 161 !!test_sta_flag(sta, WLAN_STA_PS_STA), jiffies); 162 - dev_kfree_skb(skb); 162 + ieee80211_free_txskb(&local->hw, skb); 163 163 } 164 164 165 165 static void ieee80211_check_pending_bar(struct sta_info *sta, u8 *addr, u8 tid)
+12 -10
net/mac80211/tx.c
··· 354 354 total += skb_queue_len(&sta->ps_tx_buf[ac]); 355 355 if (skb) { 356 356 purged++; 357 - dev_kfree_skb(skb); 357 + ieee80211_free_txskb(&local->hw, skb); 358 358 break; 359 359 } 360 360 } ··· 466 466 ps_dbg(tx->sdata, 467 467 "STA %pM TX buffer for AC %d full - dropping oldest frame\n", 468 468 sta->sta.addr, ac); 469 - dev_kfree_skb(old); 469 + ieee80211_free_txskb(&local->hw, old); 470 470 } else 471 471 tx->local->total_ps_buffered++; 472 472 ··· 1103 1103 spin_unlock(&tx->sta->lock); 1104 1104 1105 1105 if (purge_skb) 1106 - dev_kfree_skb(purge_skb); 1106 + ieee80211_free_txskb(&tx->local->hw, purge_skb); 1107 1107 } 1108 1108 1109 1109 /* reset session timer */ ··· 1214 1214 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG 1215 1215 if (WARN_ON_ONCE(q >= local->hw.queues)) { 1216 1216 __skb_unlink(skb, skbs); 1217 - dev_kfree_skb(skb); 1217 + ieee80211_free_txskb(&local->hw, skb); 1218 1218 continue; 1219 1219 } 1220 1220 #endif ··· 1356 1356 if (unlikely(res == TX_DROP)) { 1357 1357 I802_DEBUG_INC(tx->local->tx_handlers_drop); 1358 1358 if (tx->skb) 1359 - dev_kfree_skb(tx->skb); 1359 + ieee80211_free_txskb(&tx->local->hw, tx->skb); 1360 1360 else 1361 1361 __skb_queue_purge(&tx->skbs); 1362 1362 return -1; ··· 1393 1393 res_prepare = ieee80211_tx_prepare(sdata, &tx, skb); 1394 1394 1395 1395 if (unlikely(res_prepare == TX_DROP)) { 1396 - dev_kfree_skb(skb); 1396 + ieee80211_free_txskb(&local->hw, skb); 1397 1397 goto out; 1398 1398 } else if (unlikely(res_prepare == TX_QUEUED)) { 1399 1399 goto out; ··· 1465 1465 headroom = max_t(int, 0, headroom); 1466 1466 1467 1467 if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) { 1468 - dev_kfree_skb(skb); 1468 + ieee80211_free_txskb(&local->hw, skb); 1469 1469 rcu_read_unlock(); 1470 1470 return; 1471 1471 } ··· 2050 2050 head_need += IEEE80211_ENCRYPT_HEADROOM; 2051 2051 head_need += local->tx_headroom; 2052 2052 head_need = max_t(int, 0, head_need); 2053 - if (ieee80211_skb_resize(sdata, skb, head_need, true)) 2054 - goto fail; 2053 + if (ieee80211_skb_resize(sdata, skb, head_need, true)) { 2054 + ieee80211_free_txskb(&local->hw, skb); 2055 + return NETDEV_TX_OK; 2056 + } 2055 2057 } 2056 2058 2057 2059 if (encaps_data) { ··· 2186 2184 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 2187 2185 2188 2186 if (WARN_ON(!info->control.vif)) { 2189 - kfree_skb(skb); 2187 + ieee80211_free_txskb(&local->hw, skb); 2190 2188 continue; 2191 2189 } 2192 2190