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

Merge remote-tracking branch 'mac80211/master' into mac80211-next

+256 -179
+5
drivers/net/wireless/ath/ath5k/base.c
··· 2369 2369 int i; 2370 2370 bool needreset = false; 2371 2371 2372 + if (!test_bit(ATH_STAT_STARTED, ah->status)) 2373 + return; 2374 + 2372 2375 mutex_lock(&ah->lock); 2373 2376 2374 2377 for (i = 0; i < ARRAY_SIZE(ah->txqs); i++) { ··· 2679 2676 mmiowb(); 2680 2677 mutex_unlock(&ah->lock); 2681 2678 2679 + set_bit(ATH_STAT_STARTED, ah->status); 2682 2680 ieee80211_queue_delayed_work(ah->hw, &ah->tx_complete_work, 2683 2681 msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT)); 2684 2682 ··· 2741 2737 2742 2738 ath5k_stop_tasklets(ah); 2743 2739 2740 + clear_bit(ATH_STAT_STARTED, ah->status); 2744 2741 cancel_delayed_work_sync(&ah->tx_complete_work); 2745 2742 2746 2743 if (!ath5k_modparam_no_hw_rfkill_switch)
+70 -68
drivers/net/wireless/ath/ath9k/ar9565_1p0_initvals.h
··· 233 233 {0x00009d10, 0x01834061}, 234 234 {0x00009d14, 0x00c00400}, 235 235 {0x00009d18, 0x00000000}, 236 - {0x00009e08, 0x0078230c}, 237 - {0x00009e24, 0x990bb515}, 238 - {0x00009e28, 0x126f0000}, 236 + {0x00009e08, 0x0038230c}, 237 + {0x00009e24, 0x9907b515}, 238 + {0x00009e28, 0x126f0600}, 239 239 {0x00009e30, 0x06336f77}, 240 240 {0x00009e34, 0x6af6532f}, 241 241 {0x00009e38, 0x0cc80c00}, ··· 337 337 338 338 static const u32 ar9565_1p0_baseband_postamble[][5] = { 339 339 /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ 340 - {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a800d}, 340 + {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8009}, 341 341 {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a01ae}, 342 342 {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x63c640da}, 343 343 {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x09143c81}, ··· 345 345 {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c}, 346 346 {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4}, 347 347 {0x00009e00, 0x0372111a, 0x0372111a, 0x037216a0, 0x037216a0}, 348 - {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020}, 349 - {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000d8}, 350 - {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec86d2e}, 348 + {0x00009e04, 0x00802020, 0x00802020, 0x00142020, 0x00142020}, 349 + {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2}, 350 + {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e}, 351 351 {0x00009e14, 0x37b95d5e, 0x37b9605e, 0x3379605e, 0x33795d5e}, 352 352 {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 353 353 {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c}, ··· 450 450 451 451 static const u32 ar9565_1p0_Common_rx_gain_table[][2] = { 452 452 /* Addr allmodes */ 453 + {0x00004050, 0x00300300}, 454 + {0x0000406c, 0x00100000}, 453 455 {0x0000a000, 0x00010000}, 454 456 {0x0000a004, 0x00030002}, 455 457 {0x0000a008, 0x00050004}, ··· 500 498 {0x0000a0b4, 0x00000000}, 501 499 {0x0000a0b8, 0x00000000}, 502 500 {0x0000a0bc, 0x00000000}, 503 - {0x0000a0c0, 0x001f0000}, 504 - {0x0000a0c4, 0x01000101}, 505 - {0x0000a0c8, 0x011e011f}, 506 - {0x0000a0cc, 0x011c011d}, 507 - {0x0000a0d0, 0x02030204}, 508 - {0x0000a0d4, 0x02010202}, 509 - {0x0000a0d8, 0x021f0200}, 510 - {0x0000a0dc, 0x0302021e}, 511 - {0x0000a0e0, 0x03000301}, 512 - {0x0000a0e4, 0x031e031f}, 513 - {0x0000a0e8, 0x0402031d}, 514 - {0x0000a0ec, 0x04000401}, 515 - {0x0000a0f0, 0x041e041f}, 516 - {0x0000a0f4, 0x0502041d}, 517 - {0x0000a0f8, 0x05000501}, 518 - {0x0000a0fc, 0x051e051f}, 519 - {0x0000a100, 0x06010602}, 520 - {0x0000a104, 0x061f0600}, 521 - {0x0000a108, 0x061d061e}, 522 - {0x0000a10c, 0x07020703}, 523 - {0x0000a110, 0x07000701}, 501 + {0x0000a0c0, 0x00bf00a0}, 502 + {0x0000a0c4, 0x11a011a1}, 503 + {0x0000a0c8, 0x11be11bf}, 504 + {0x0000a0cc, 0x11bc11bd}, 505 + {0x0000a0d0, 0x22632264}, 506 + {0x0000a0d4, 0x22612262}, 507 + {0x0000a0d8, 0x227f2260}, 508 + {0x0000a0dc, 0x4322227e}, 509 + {0x0000a0e0, 0x43204321}, 510 + {0x0000a0e4, 0x433e433f}, 511 + {0x0000a0e8, 0x4462433d}, 512 + {0x0000a0ec, 0x44604461}, 513 + {0x0000a0f0, 0x447e447f}, 514 + {0x0000a0f4, 0x5582447d}, 515 + {0x0000a0f8, 0x55805581}, 516 + {0x0000a0fc, 0x559e559f}, 517 + {0x0000a100, 0x66816682}, 518 + {0x0000a104, 0x669f6680}, 519 + {0x0000a108, 0x669d669e}, 520 + {0x0000a10c, 0x77627763}, 521 + {0x0000a110, 0x77607761}, 524 522 {0x0000a114, 0x00000000}, 525 523 {0x0000a118, 0x00000000}, 526 524 {0x0000a11c, 0x00000000}, ··· 532 530 {0x0000a134, 0x00000000}, 533 531 {0x0000a138, 0x00000000}, 534 532 {0x0000a13c, 0x00000000}, 535 - {0x0000a140, 0x001f0000}, 536 - {0x0000a144, 0x01000101}, 537 - {0x0000a148, 0x011e011f}, 538 - {0x0000a14c, 0x011c011d}, 539 - {0x0000a150, 0x02030204}, 540 - {0x0000a154, 0x02010202}, 541 - {0x0000a158, 0x021f0200}, 542 - {0x0000a15c, 0x0302021e}, 543 - {0x0000a160, 0x03000301}, 544 - {0x0000a164, 0x031e031f}, 545 - {0x0000a168, 0x0402031d}, 546 - {0x0000a16c, 0x04000401}, 547 - {0x0000a170, 0x041e041f}, 548 - {0x0000a174, 0x0502041d}, 549 - {0x0000a178, 0x05000501}, 550 - {0x0000a17c, 0x051e051f}, 551 - {0x0000a180, 0x06010602}, 552 - {0x0000a184, 0x061f0600}, 553 - {0x0000a188, 0x061d061e}, 554 - {0x0000a18c, 0x07020703}, 555 - {0x0000a190, 0x07000701}, 533 + {0x0000a140, 0x00bf00a0}, 534 + {0x0000a144, 0x11a011a1}, 535 + {0x0000a148, 0x11be11bf}, 536 + {0x0000a14c, 0x11bc11bd}, 537 + {0x0000a150, 0x22632264}, 538 + {0x0000a154, 0x22612262}, 539 + {0x0000a158, 0x227f2260}, 540 + {0x0000a15c, 0x4322227e}, 541 + {0x0000a160, 0x43204321}, 542 + {0x0000a164, 0x433e433f}, 543 + {0x0000a168, 0x4462433d}, 544 + {0x0000a16c, 0x44604461}, 545 + {0x0000a170, 0x447e447f}, 546 + {0x0000a174, 0x5582447d}, 547 + {0x0000a178, 0x55805581}, 548 + {0x0000a17c, 0x559e559f}, 549 + {0x0000a180, 0x66816682}, 550 + {0x0000a184, 0x669f6680}, 551 + {0x0000a188, 0x669d669e}, 552 + {0x0000a18c, 0x77e677e7}, 553 + {0x0000a190, 0x77e477e5}, 556 554 {0x0000a194, 0x00000000}, 557 555 {0x0000a198, 0x00000000}, 558 556 {0x0000a19c, 0x00000000}, ··· 772 770 773 771 static const u32 ar9565_1p0_pciephy_clkreq_disable_L1[][2] = { 774 772 /* Addr allmodes */ 775 - {0x00018c00, 0x18213ede}, 773 + {0x00018c00, 0x18212ede}, 776 774 {0x00018c04, 0x000801d8}, 777 775 {0x00018c08, 0x0003780c}, 778 776 }; ··· 891 889 {0x0000a180, 0x66816682}, 892 890 {0x0000a184, 0x669f6680}, 893 891 {0x0000a188, 0x669d669e}, 894 - {0x0000a18c, 0x77627763}, 895 - {0x0000a190, 0x77607761}, 892 + {0x0000a18c, 0x77e677e7}, 893 + {0x0000a190, 0x77e477e5}, 896 894 {0x0000a194, 0x00000000}, 897 895 {0x0000a198, 0x00000000}, 898 896 {0x0000a19c, 0x00000000}, ··· 1116 1114 {0x0000a2e0, 0xffecec00, 0xffecec00, 0xfd339c84, 0xfd339c84}, 1117 1115 {0x0000a2e4, 0xfc0f0000, 0xfc0f0000, 0xfec3e000, 0xfec3e000}, 1118 1116 {0x0000a2e8, 0xfc100000, 0xfc100000, 0xfffc0000, 0xfffc0000}, 1119 - {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, 1117 + {0x0000a410, 0x000050d9, 0x000050d9, 0x000050df, 0x000050df}, 1120 1118 {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, 1121 1119 {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, 1122 1120 {0x0000a508, 0x0b022220, 0x0b022220, 0x08000004, 0x08000004}, ··· 1142 1140 {0x0000a558, 0x69027f56, 0x69027f56, 0x53001ce5, 0x53001ce5}, 1143 1141 {0x0000a55c, 0x6d029f56, 0x6d029f56, 0x57001ce9, 0x57001ce9}, 1144 1142 {0x0000a560, 0x73049f56, 0x73049f56, 0x5b001ceb, 0x5b001ceb}, 1145 - {0x0000a564, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1146 - {0x0000a568, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1147 - {0x0000a56c, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1148 - {0x0000a570, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1149 - {0x0000a574, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1150 - {0x0000a578, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1151 - {0x0000a57c, 0x7804ff56, 0x7804ff56, 0x5d001eec, 0x5d001eec}, 1143 + {0x0000a564, 0x7804ff56, 0x7804ff56, 0x60001cf0, 0x60001cf0}, 1144 + {0x0000a568, 0x7804ff56, 0x7804ff56, 0x61001cf1, 0x61001cf1}, 1145 + {0x0000a56c, 0x7804ff56, 0x7804ff56, 0x62001cf2, 0x62001cf2}, 1146 + {0x0000a570, 0x7804ff56, 0x7804ff56, 0x63001cf3, 0x63001cf3}, 1147 + {0x0000a574, 0x7804ff56, 0x7804ff56, 0x64001cf4, 0x64001cf4}, 1148 + {0x0000a578, 0x7804ff56, 0x7804ff56, 0x66001ff6, 0x66001ff6}, 1149 + {0x0000a57c, 0x7804ff56, 0x7804ff56, 0x66001ff6, 0x66001ff6}, 1152 1150 {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 1153 1151 {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 1154 1152 {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ··· 1176 1174 {0x0000a2e0, 0xffecec00, 0xffecec00, 0xfd339c84, 0xfd339c84}, 1177 1175 {0x0000a2e4, 0xfc0f0000, 0xfc0f0000, 0xfec3e000, 0xfec3e000}, 1178 1176 {0x0000a2e8, 0xfc100000, 0xfc100000, 0xfffc0000, 0xfffc0000}, 1179 - {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, 1177 + {0x0000a410, 0x000050d9, 0x000050d9, 0x000050df, 0x000050df}, 1180 1178 {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, 1181 1179 {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, 1182 1180 {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, ··· 1202 1200 {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, 1203 1201 {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, 1204 1202 {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, 1205 - {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1206 - {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1207 - {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1208 - {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1209 - {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1210 - {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1211 - {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, 1203 + {0x0000a564, 0x7504ff56, 0x7504ff56, 0x59001cf0, 0x59001cf0}, 1204 + {0x0000a568, 0x7504ff56, 0x7504ff56, 0x5a001cf1, 0x5a001cf1}, 1205 + {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x5b001cf2, 0x5b001cf2}, 1206 + {0x0000a570, 0x7504ff56, 0x7504ff56, 0x5c001cf3, 0x5c001cf3}, 1207 + {0x0000a574, 0x7504ff56, 0x7504ff56, 0x5d001cf4, 0x5d001cf4}, 1208 + {0x0000a578, 0x7504ff56, 0x7504ff56, 0x5f001ff6, 0x5f001ff6}, 1209 + {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x5f001ff6, 0x5f001ff6}, 1212 1210 {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 1213 1211 {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 1214 1212 {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
+7 -3
drivers/net/wireless/ath/ath9k/main.c
··· 227 227 if (!test_bit(SC_OP_BEACONS, &sc->sc_flags)) 228 228 goto work; 229 229 230 - ath9k_set_beacon(sc); 231 - 232 230 if (ah->opmode == NL80211_IFTYPE_STATION && 233 231 test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) { 234 232 spin_lock_irqsave(&sc->sc_pm_lock, flags); 235 233 sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON; 236 234 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); 235 + } else { 236 + ath9k_set_beacon(sc); 237 237 } 238 238 work: 239 239 ath_restart_work(sc); ··· 1332 1332 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 1333 1333 struct ath_node *an = (struct ath_node *) sta->drv_priv; 1334 1334 struct ieee80211_key_conf ps_key = { }; 1335 + int key; 1335 1336 1336 1337 ath_node_attach(sc, sta, vif); 1337 1338 ··· 1340 1339 vif->type != NL80211_IFTYPE_AP_VLAN) 1341 1340 return 0; 1342 1341 1343 - an->ps_key = ath_key_config(common, vif, sta, &ps_key); 1342 + key = ath_key_config(common, vif, sta, &ps_key); 1343 + if (key > 0) 1344 + an->ps_key = key; 1344 1345 1345 1346 return 0; 1346 1347 } ··· 1359 1356 return; 1360 1357 1361 1358 ath_key_delete(common, &ps_key); 1359 + an->ps_key = 0; 1362 1360 } 1363 1361 1364 1362 static int ath9k_sta_remove(struct ieee80211_hw *hw,
+19
drivers/net/wireless/b43/dma.c
··· 1728 1728 sync_descbuffer_for_device(ring, dmaaddr, ring->rx_buffersize); 1729 1729 } 1730 1730 1731 + void b43_dma_handle_rx_overflow(struct b43_dmaring *ring) 1732 + { 1733 + int current_slot, previous_slot; 1734 + 1735 + B43_WARN_ON(ring->tx); 1736 + 1737 + /* Device has filled all buffers, drop all packets and let TCP 1738 + * decrease speed. 1739 + * Decrement RX index by one will let the device to see all slots 1740 + * as free again 1741 + */ 1742 + /* 1743 + *TODO: How to increase rx_drop in mac80211? 1744 + */ 1745 + current_slot = ring->ops->get_current_rxslot(ring); 1746 + previous_slot = prev_slot(ring, current_slot); 1747 + ring->ops->set_current_rxslot(ring, previous_slot); 1748 + } 1749 + 1731 1750 void b43_dma_rx(struct b43_dmaring *ring) 1732 1751 { 1733 1752 const struct b43_dma_ops *ops = ring->ops;
+3 -1
drivers/net/wireless/b43/dma.h
··· 9 9 /* DMA-Interrupt reasons. */ 10 10 #define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \ 11 11 | (1 << 14) | (1 << 15)) 12 - #define B43_DMAIRQ_NONFATALMASK (1 << 13) 12 + #define B43_DMAIRQ_RDESC_UFLOW (1 << 13) 13 13 #define B43_DMAIRQ_RX_DONE (1 << 16) 14 14 15 15 /*** 32-bit DMA Engine. ***/ ··· 294 294 struct sk_buff *skb); 295 295 void b43_dma_handle_txstatus(struct b43_wldev *dev, 296 296 const struct b43_txstatus *status); 297 + 298 + void b43_dma_handle_rx_overflow(struct b43_dmaring *ring); 297 299 298 300 void b43_dma_rx(struct b43_dmaring *ring); 299 301
+18 -25
drivers/net/wireless/b43/main.c
··· 1902 1902 } 1903 1903 } 1904 1904 1905 - if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK | 1906 - B43_DMAIRQ_NONFATALMASK))) { 1907 - if (merged_dma_reason & B43_DMAIRQ_FATALMASK) { 1908 - b43err(dev->wl, "Fatal DMA error: " 1909 - "0x%08X, 0x%08X, 0x%08X, " 1910 - "0x%08X, 0x%08X, 0x%08X\n", 1911 - dma_reason[0], dma_reason[1], 1912 - dma_reason[2], dma_reason[3], 1913 - dma_reason[4], dma_reason[5]); 1914 - b43err(dev->wl, "This device does not support DMA " 1905 + if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK))) { 1906 + b43err(dev->wl, 1907 + "Fatal DMA error: 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X\n", 1908 + dma_reason[0], dma_reason[1], 1909 + dma_reason[2], dma_reason[3], 1910 + dma_reason[4], dma_reason[5]); 1911 + b43err(dev->wl, "This device does not support DMA " 1915 1912 "on your system. It will now be switched to PIO.\n"); 1916 - /* Fall back to PIO transfers if we get fatal DMA errors! */ 1917 - dev->use_pio = true; 1918 - b43_controller_restart(dev, "DMA error"); 1919 - return; 1920 - } 1921 - if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { 1922 - b43err(dev->wl, "DMA error: " 1923 - "0x%08X, 0x%08X, 0x%08X, " 1924 - "0x%08X, 0x%08X, 0x%08X\n", 1925 - dma_reason[0], dma_reason[1], 1926 - dma_reason[2], dma_reason[3], 1927 - dma_reason[4], dma_reason[5]); 1928 - } 1913 + /* Fall back to PIO transfers if we get fatal DMA errors! */ 1914 + dev->use_pio = true; 1915 + b43_controller_restart(dev, "DMA error"); 1916 + return; 1929 1917 } 1930 1918 1931 1919 if (unlikely(reason & B43_IRQ_UCODE_DEBUG)) ··· 1932 1944 handle_irq_noise(dev); 1933 1945 1934 1946 /* Check the DMA reason registers for received data. */ 1947 + if (dma_reason[0] & B43_DMAIRQ_RDESC_UFLOW) { 1948 + if (B43_DEBUG) 1949 + b43warn(dev->wl, "RX descriptor underrun\n"); 1950 + b43_dma_handle_rx_overflow(dev->dma.rx_ring); 1951 + } 1935 1952 if (dma_reason[0] & B43_DMAIRQ_RX_DONE) { 1936 1953 if (b43_using_pio_transfers(dev)) 1937 1954 b43_pio_rx(dev->pio.rx_queue); ··· 1994 2001 return IRQ_NONE; 1995 2002 1996 2003 dev->dma_reason[0] = b43_read32(dev, B43_MMIO_DMA0_REASON) 1997 - & 0x0001DC00; 2004 + & 0x0001FC00; 1998 2005 dev->dma_reason[1] = b43_read32(dev, B43_MMIO_DMA1_REASON) 1999 2006 & 0x0000DC00; 2000 2007 dev->dma_reason[2] = b43_read32(dev, B43_MMIO_DMA2_REASON) ··· 3123 3130 b43_write32(dev, 0x018C, 0x02000000); 3124 3131 } 3125 3132 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, 0x00004000); 3126 - b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001DC00); 3133 + b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001FC00); 3127 3134 b43_write32(dev, B43_MMIO_DMA1_IRQ_MASK, 0x0000DC00); 3128 3135 b43_write32(dev, B43_MMIO_DMA2_IRQ_MASK, 0x0000DC00); 3129 3136 b43_write32(dev, B43_MMIO_DMA3_IRQ_MASK, 0x0001DC00);
+1 -2
drivers/net/wireless/iwlegacy/4965-mac.c
··· 5741 5741 hw->flags = 5742 5742 IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_AMPDU_AGGREGATION | 5743 5743 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | IEEE80211_HW_SPECTRUM_MGMT | 5744 - IEEE80211_HW_REPORTS_TX_ACK_STATUS | IEEE80211_HW_SUPPORTS_PS | 5745 - IEEE80211_HW_SUPPORTS_DYNAMIC_PS; 5744 + IEEE80211_HW_SUPPORTS_PS | IEEE80211_HW_SUPPORTS_DYNAMIC_PS; 5746 5745 if (il->cfg->sku & IL_SKU_N) 5747 5746 hw->flags |= 5748 5747 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS |
+1 -13
drivers/net/wireless/iwlwifi/mvm/mac80211.c
··· 84 84 .types = BIT(NL80211_IFTYPE_STATION) | 85 85 BIT(NL80211_IFTYPE_AP), 86 86 }, 87 - { 88 - .max = 1, 89 - .types = BIT(NL80211_IFTYPE_P2P_CLIENT) | 90 - BIT(NL80211_IFTYPE_P2P_GO), 91 - }, 92 - { 93 - .max = 1, 94 - .types = BIT(NL80211_IFTYPE_P2P_DEVICE), 95 - }, 96 87 }; 97 88 98 89 static const struct ieee80211_iface_combination iwl_mvm_iface_combinations[] = { ··· 152 161 hw->chanctx_data_size = sizeof(struct iwl_mvm_phy_ctxt); 153 162 154 163 hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | 155 - BIT(NL80211_IFTYPE_P2P_CLIENT) | 156 - BIT(NL80211_IFTYPE_AP) | 157 - BIT(NL80211_IFTYPE_P2P_GO) | 158 - BIT(NL80211_IFTYPE_P2P_DEVICE); 164 + BIT(NL80211_IFTYPE_AP); 159 165 160 166 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY | 161 167 WIPHY_FLAG_DISABLE_BEACON_HINTS |
+10 -12
drivers/net/wireless/mac80211_hwsim.c
··· 1723 1723 class_destroy(hwsim_class); 1724 1724 } 1725 1725 1726 - 1727 - static struct device_driver mac80211_hwsim_driver = { 1728 - .name = "mac80211_hwsim", 1729 - .bus = &platform_bus_type, 1730 - .owner = THIS_MODULE, 1726 + static struct platform_driver mac80211_hwsim_driver = { 1727 + .driver = { 1728 + .name = "mac80211_hwsim", 1729 + .owner = THIS_MODULE, 1730 + }, 1731 1731 }; 1732 1732 1733 1733 static const struct net_device_ops hwsim_netdev_ops = { ··· 2169 2169 #endif 2170 2170 BIT(NL80211_IFTYPE_AP) | 2171 2171 BIT(NL80211_IFTYPE_P2P_GO) }, 2172 - { .max = 1, .types = BIT(NL80211_IFTYPE_P2P_DEVICE) }, 2173 2172 }; 2174 2173 2175 2174 static struct ieee80211_iface_combination hwsim_if_comb = { ··· 2218 2219 spin_lock_init(&hwsim_radio_lock); 2219 2220 INIT_LIST_HEAD(&hwsim_radios); 2220 2221 2221 - err = driver_register(&mac80211_hwsim_driver); 2222 + err = platform_driver_register(&mac80211_hwsim_driver); 2222 2223 if (err) 2223 2224 return err; 2224 2225 ··· 2253 2254 err = -ENOMEM; 2254 2255 goto failed_drvdata; 2255 2256 } 2256 - data->dev->driver = &mac80211_hwsim_driver; 2257 + data->dev->driver = &mac80211_hwsim_driver.driver; 2257 2258 err = device_bind_driver(data->dev); 2258 2259 if (err != 0) { 2259 2260 printk(KERN_DEBUG ··· 2294 2295 BIT(NL80211_IFTYPE_P2P_CLIENT) | 2295 2296 BIT(NL80211_IFTYPE_P2P_GO) | 2296 2297 BIT(NL80211_IFTYPE_ADHOC) | 2297 - BIT(NL80211_IFTYPE_MESH_POINT) | 2298 - BIT(NL80211_IFTYPE_P2P_DEVICE); 2298 + BIT(NL80211_IFTYPE_MESH_POINT); 2299 2299 2300 2300 hw->flags = IEEE80211_HW_MFP_CAPABLE | 2301 2301 IEEE80211_HW_SIGNAL_DBM | ··· 2562 2564 failed: 2563 2565 mac80211_hwsim_free(); 2564 2566 failed_unregister_driver: 2565 - driver_unregister(&mac80211_hwsim_driver); 2567 + platform_driver_unregister(&mac80211_hwsim_driver); 2566 2568 return err; 2567 2569 } 2568 2570 module_init(init_mac80211_hwsim); ··· 2575 2577 2576 2578 mac80211_hwsim_free(); 2577 2579 unregister_netdev(hwsim_mon); 2578 - driver_unregister(&mac80211_hwsim_driver); 2580 + platform_driver_unregister(&mac80211_hwsim_driver); 2579 2581 } 2580 2582 module_exit(exit_mac80211_hwsim);
-3
drivers/net/wireless/mwifiex/cfg80211.c
··· 2234 2234 if (wdev->netdev->reg_state == NETREG_REGISTERED) 2235 2235 unregister_netdevice(wdev->netdev); 2236 2236 2237 - if (wdev->netdev->reg_state == NETREG_UNREGISTERED) 2238 - free_netdev(wdev->netdev); 2239 - 2240 2237 /* Clear the priv in adapter */ 2241 2238 priv->netdev = NULL; 2242 2239
+1
drivers/net/wireless/mwifiex/cmdevt.c
··· 1191 1191 adapter->if_ops.wakeup(adapter); 1192 1192 adapter->hs_activated = false; 1193 1193 adapter->is_hs_configured = false; 1194 + adapter->is_suspended = false; 1194 1195 mwifiex_hs_activated_event(mwifiex_get_priv(adapter, 1195 1196 MWIFIEX_BSS_ROLE_ANY), 1196 1197 false);
+1
drivers/net/wireless/mwifiex/main.c
··· 655 655 struct net_device *dev) 656 656 { 657 657 dev->netdev_ops = &mwifiex_netdev_ops; 658 + dev->destructor = free_netdev; 658 659 /* Initialize private structure */ 659 660 priv->current_key_index = 0; 660 661 priv->media_connected = false;
+6 -15
drivers/net/wireless/mwifiex/sta_ioctl.c
··· 96 96 } else { 97 97 /* Multicast */ 98 98 priv->curr_pkt_filter &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE; 99 - if (mcast_list->mode == MWIFIEX_MULTICAST_MODE) { 99 + if (mcast_list->mode == MWIFIEX_ALL_MULTI_MODE) { 100 100 dev_dbg(priv->adapter->dev, 101 101 "info: Enabling All Multicast!\n"); 102 102 priv->curr_pkt_filter |= ··· 108 108 dev_dbg(priv->adapter->dev, 109 109 "info: Set multicast list=%d\n", 110 110 mcast_list->num_multicast_addr); 111 - /* Set multicast addresses to firmware */ 112 - if (old_pkt_filter == priv->curr_pkt_filter) { 113 - /* Send request to firmware */ 114 - ret = mwifiex_send_cmd_async(priv, 115 - HostCmd_CMD_MAC_MULTICAST_ADR, 116 - HostCmd_ACT_GEN_SET, 0, 117 - mcast_list); 118 - } else { 119 - /* Send request to firmware */ 120 - ret = mwifiex_send_cmd_async(priv, 121 - HostCmd_CMD_MAC_MULTICAST_ADR, 122 - HostCmd_ACT_GEN_SET, 0, 123 - mcast_list); 124 - } 111 + /* Send multicast addresses to firmware */ 112 + ret = mwifiex_send_cmd_async(priv, 113 + HostCmd_CMD_MAC_MULTICAST_ADR, 114 + HostCmd_ACT_GEN_SET, 0, 115 + mcast_list); 125 116 } 126 117 } 127 118 }
+8 -4
include/net/mac80211.h
··· 3053 3053 * This function may not be called in IRQ context. Calls to this function 3054 3054 * for a single hardware must be synchronized against each other. Calls to 3055 3055 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be 3056 - * mixed for a single hardware. 3056 + * mixed for a single hardware. Must not run concurrently with 3057 + * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3057 3058 * 3058 3059 * In process context use instead ieee80211_rx_ni(). 3059 3060 * ··· 3070 3069 * (internally defers to a tasklet.) 3071 3070 * 3072 3071 * Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not 3073 - * be mixed for a single hardware. 3072 + * be mixed for a single hardware.Must not run concurrently with 3073 + * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3074 3074 * 3075 3075 * @hw: the hardware this frame came in on 3076 3076 * @skb: the buffer to receive, owned by mac80211 after this call ··· 3085 3083 * (internally disables bottom halves). 3086 3084 * 3087 3085 * Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may 3088 - * not be mixed for a single hardware. 3086 + * not be mixed for a single hardware. Must not run concurrently with 3087 + * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3089 3088 * 3090 3089 * @hw: the hardware this frame came in on 3091 3090 * @skb: the buffer to receive, owned by mac80211 after this call ··· 3209 3206 * This function may not be called in IRQ context. Calls to this function 3210 3207 * for a single hardware must be synchronized against each other. Calls 3211 3208 * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe() 3212 - * may not be mixed for a single hardware. 3209 + * may not be mixed for a single hardware. Must not run concurrently with 3210 + * ieee80211_rx() or ieee80211_rx_ni(). 3213 3211 * 3214 3212 * @hw: the hardware the frame was transmitted by 3215 3213 * @skb: the frame that was transmitted, owned by mac80211 after this call
+1
net/mac80211/ieee80211_i.h
··· 1267 1267 void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); 1268 1268 void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata, 1269 1269 __le16 fc, bool acked); 1270 + void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); 1270 1271 1271 1272 /* IBSS code */ 1272 1273 void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
+17 -1
net/mac80211/iface.c
··· 474 474 master->control_port_protocol; 475 475 sdata->control_port_no_encrypt = 476 476 master->control_port_no_encrypt; 477 + sdata->vif.cab_queue = master->vif.cab_queue; 478 + memcpy(sdata->vif.hw_queue, master->vif.hw_queue, 479 + sizeof(sdata->vif.hw_queue)); 477 480 break; 478 481 } 479 482 case NL80211_IFTYPE_AP: ··· 656 653 657 654 ieee80211_recalc_ps(local, -1); 658 655 659 - if (dev) { 656 + if (sdata->vif.type == NL80211_IFTYPE_MONITOR || 657 + sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { 658 + /* XXX: for AP_VLAN, actually track AP queues */ 659 + netif_tx_start_all_queues(dev); 660 + } else if (dev) { 660 661 unsigned long flags; 661 662 int n_acs = IEEE80211_NUM_ACS; 662 663 int ac; ··· 1702 1695 LIST_HEAD(wdev_list); 1703 1696 1704 1697 ASSERT_RTNL(); 1698 + 1699 + /* 1700 + * Close all AP_VLAN interfaces first, as otherwise they 1701 + * might be closed while the AP interface they belong to 1702 + * is closed, causing unregister_netdevice_many() to crash. 1703 + */ 1704 + list_for_each_entry(sdata, &local->interfaces, list) 1705 + if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 1706 + dev_close(sdata->dev); 1705 1707 1706 1708 mutex_lock(&local->iflist_mtx); 1707 1709 list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
+35 -10
net/mac80211/mlme.c
··· 3325 3325 if (WARN_ON_ONCE(!auth_data)) 3326 3326 return -EINVAL; 3327 3327 3328 - if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) 3329 - tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS | 3330 - IEEE80211_TX_INTFL_MLME_CONN_TX; 3331 - 3332 3328 auth_data->tries++; 3333 3329 3334 3330 if (auth_data->tries > IEEE80211_AUTH_MAX_TRIES) { ··· 3358 3362 auth_data->expected_transaction = trans; 3359 3363 } 3360 3364 3365 + if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) 3366 + tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS | 3367 + IEEE80211_TX_INTFL_MLME_CONN_TX; 3368 + 3361 3369 ieee80211_send_auth(sdata, trans, auth_data->algorithm, status, 3362 3370 auth_data->data, auth_data->data_len, 3363 3371 auth_data->bss->bssid, ··· 3385 3385 * will not answer to direct packet in unassociated state. 3386 3386 */ 3387 3387 ieee80211_send_probe_req(sdata, NULL, ssidie + 2, ssidie[1], 3388 - NULL, 0, (u32) -1, true, tx_flags, 3388 + NULL, 0, (u32) -1, true, 0, 3389 3389 auth_data->bss->channel, false); 3390 3390 rcu_read_unlock(); 3391 3391 } 3392 3392 3393 - if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) { 3393 + if (tx_flags == 0) { 3394 3394 auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT; 3395 3395 ifmgd->auth_data->timeout_started = true; 3396 3396 run_again(ifmgd, auth_data->timeout); ··· 3642 3642 ieee80211_queue_work(&sdata->local->hw, &sdata->work); 3643 3643 } 3644 3644 } 3645 + 3646 + #ifdef CONFIG_PM 3647 + void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata) 3648 + { 3649 + struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; 3650 + 3651 + mutex_lock(&ifmgd->mtx); 3652 + if (!ifmgd->associated) { 3653 + mutex_unlock(&ifmgd->mtx); 3654 + return; 3655 + } 3656 + 3657 + if (sdata->flags & IEEE80211_SDATA_DISCONNECT_RESUME) { 3658 + sdata->flags &= ~IEEE80211_SDATA_DISCONNECT_RESUME; 3659 + mlme_dbg(sdata, "driver requested disconnect after resume\n"); 3660 + ieee80211_sta_connection_lost(sdata, 3661 + ifmgd->associated->bssid, 3662 + WLAN_REASON_UNSPECIFIED, 3663 + true); 3664 + mutex_unlock(&ifmgd->mtx); 3665 + return; 3666 + } 3667 + mutex_unlock(&ifmgd->mtx); 3668 + } 3669 + #endif 3645 3670 3646 3671 /* interface setup */ 3647 3672 void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata) ··· 4374 4349 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; 4375 4350 u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; 4376 4351 bool tx = !req->local_state_change; 4377 - bool sent_frame = false; 4352 + bool report_frame = false; 4378 4353 4379 4354 mutex_lock(&ifmgd->mtx); 4380 4355 ··· 4391 4366 ieee80211_destroy_auth_data(sdata, false); 4392 4367 mutex_unlock(&ifmgd->mtx); 4393 4368 4394 - sent_frame = tx; 4369 + report_frame = true; 4395 4370 goto out; 4396 4371 } 4397 4372 ··· 4399 4374 ether_addr_equal(ifmgd->associated->bssid, req->bssid)) { 4400 4375 ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, 4401 4376 req->reason_code, tx, frame_buf); 4402 - sent_frame = tx; 4377 + report_frame = true; 4403 4378 } 4404 4379 mutex_unlock(&ifmgd->mtx); 4405 4380 4406 4381 out: 4407 - if (sent_frame) 4382 + if (report_frame) 4408 4383 __cfg80211_send_deauth(sdata->dev, frame_buf, 4409 4384 IEEE80211_DEAUTH_FRAME_LEN); 4410 4385
+8 -1
net/mac80211/rate.c
··· 688 688 struct ieee80211_sta *pubsta, 689 689 struct ieee80211_sta_rates *rates) 690 690 { 691 - struct ieee80211_sta_rates *old = rcu_dereference(pubsta->rates); 691 + struct ieee80211_sta_rates *old; 692 692 693 + /* 694 + * mac80211 guarantees that this function will not be called 695 + * concurrently, so the following RCU access is safe, even without 696 + * extra locking. This can not be checked easily, so we just set 697 + * the condition to true. 698 + */ 699 + old = rcu_dereference_protected(pubsta->rates, true); 693 700 rcu_assign_pointer(pubsta->rates, rates); 694 701 if (old) 695 702 kfree_rcu(old, rcu_head);
+3
net/mac80211/rx.c
··· 3054 3054 * and location updates. Note that mac80211 3055 3055 * itself never looks at these frames. 3056 3056 */ 3057 + if (!multicast && 3058 + !ether_addr_equal(sdata->vif.addr, hdr->addr1)) 3059 + return 0; 3057 3060 if (ieee80211_is_public_action(hdr, skb->len)) 3058 3061 return 1; 3059 3062 if (!ieee80211_is_beacon(hdr->frame_control))
+2 -2
net/mac80211/tkip.c
··· 208 208 u32 iv32 = get_unaligned_le32(&data[4]); 209 209 u16 iv16 = data[2] | (data[0] << 8); 210 210 211 - spin_lock_bh(&key->u.tkip.txlock); 211 + spin_lock(&key->u.tkip.txlock); 212 212 ieee80211_compute_tkip_p1k(key, iv32); 213 213 tkip_mixing_phase2(tk, ctx, iv16, p2k); 214 - spin_unlock_bh(&key->u.tkip.txlock); 214 + spin_unlock(&key->u.tkip.txlock); 215 215 } 216 216 EXPORT_SYMBOL(ieee80211_get_tkip_p2k); 217 217
+7
net/mac80211/util.c
··· 1714 1714 mb(); 1715 1715 local->resuming = false; 1716 1716 1717 + list_for_each_entry(sdata, &local->interfaces, list) { 1718 + if (!ieee80211_sdata_running(sdata)) 1719 + continue; 1720 + if (sdata->vif.type == NL80211_IFTYPE_STATION) 1721 + ieee80211_sta_restart(sdata); 1722 + } 1723 + 1717 1724 mod_timer(&local->sta_cleanup, jiffies + 1); 1718 1725 #else 1719 1726 WARN_ON(1);
+10 -7
net/wireless/core.c
··· 639 639 * cfg80211_mutex lock 640 640 */ 641 641 res = rfkill_register(rdev->rfkill); 642 - if (res) 643 - goto out_rm_dev; 642 + if (res) { 643 + device_del(&rdev->wiphy.dev); 644 + 645 + mutex_lock(&cfg80211_mutex); 646 + debugfs_remove_recursive(rdev->wiphy.debugfsdir); 647 + list_del_rcu(&rdev->list); 648 + wiphy_regulatory_deregister(wiphy); 649 + mutex_unlock(&cfg80211_mutex); 650 + return res; 651 + } 644 652 645 653 rtnl_lock(); 646 654 rdev->wiphy.registered = true; 647 655 rtnl_unlock(); 648 656 return 0; 649 - 650 - out_rm_dev: 651 - device_del(&rdev->wiphy.dev); 652 - return res; 653 657 } 654 658 EXPORT_SYMBOL(wiphy_register); 655 659 ··· 871 867 #endif 872 868 __cfg80211_disconnect(rdev, dev, 873 869 WLAN_REASON_DEAUTH_LEAVING, true); 874 - cfg80211_mlme_down(rdev, dev); 875 870 wdev_unlock(wdev); 876 871 break; 877 872 case NL80211_IFTYPE_MESH_POINT:
+5 -1
net/wireless/nl80211.c
··· 3438 3438 (u32)sinfo->rx_bytes)) 3439 3439 goto nla_put_failure; 3440 3440 if ((sinfo->filled & (STATION_INFO_TX_BYTES | 3441 - NL80211_STA_INFO_TX_BYTES64)) && 3441 + STATION_INFO_TX_BYTES64)) && 3442 3442 nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES, 3443 3443 (u32)sinfo->tx_bytes)) 3444 3444 goto nla_put_failure; ··· 7630 7630 &tcp->payload_tok)) 7631 7631 return -ENOBUFS; 7632 7632 7633 + nla_nest_end(msg, nl_tcp); 7634 + 7633 7635 return 0; 7634 7636 } 7635 7637 ··· 10025 10023 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 10026 10024 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, 10027 10025 netdev->ifindex)) || 10026 + nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || 10028 10027 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) || 10029 10028 (sig_dbm && 10030 10029 nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || ··· 10066 10063 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 10067 10064 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, 10068 10065 netdev->ifindex)) || 10066 + nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || 10069 10067 nla_put(msg, NL80211_ATTR_FRAME, len, buf) || 10070 10068 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || 10071 10069 (ack && nla_put_flag(msg, NL80211_ATTR_ACK)))
+5 -1
net/wireless/sme.c
··· 231 231 mutex_lock(&rdev->sched_scan_mtx); 232 232 233 233 list_for_each_entry(wdev, &rdev->wdev_list, list) { 234 + if (!wdev->netdev) 235 + continue; 236 + 234 237 wdev_lock(wdev); 235 238 if (!netif_running(wdev->netdev)) { 236 239 wdev_unlock(wdev); ··· 964 961 /* was it connected by userspace SME? */ 965 962 if (!wdev->conn) { 966 963 cfg80211_mlme_down(rdev, dev); 967 - return 0; 964 + goto disconnect; 968 965 } 969 966 970 967 if (wdev->sme_state == CFG80211_SME_CONNECTING && ··· 990 987 return err; 991 988 } 992 989 990 + disconnect: 993 991 if (wdev->sme_state == CFG80211_SME_CONNECTED) 994 992 __cfg80211_disconnected(dev, NULL, 0, 0, false); 995 993 else if (wdev->sme_state == CFG80211_SME_CONNECTING)
+13 -10
net/wireless/trace.h
··· 2441 2441 TP_STRUCT__entry( 2442 2442 WIPHY_ENTRY 2443 2443 WDEV_ENTRY 2444 + __field(bool, non_wireless) 2444 2445 __field(bool, disconnect) 2445 2446 __field(bool, magic_pkt) 2446 2447 __field(bool, gtk_rekey_failure) ··· 2450 2449 __field(bool, rfkill_release) 2451 2450 __field(s32, pattern_idx) 2452 2451 __field(u32, packet_len) 2453 - __dynamic_array(u8, packet, wakeup->packet_present_len) 2452 + __dynamic_array(u8, packet, 2453 + wakeup ? wakeup->packet_present_len : 0) 2454 2454 ), 2455 2455 TP_fast_assign( 2456 2456 WIPHY_ASSIGN; 2457 2457 WDEV_ASSIGN; 2458 - __entry->disconnect = wakeup->disconnect; 2459 - __entry->magic_pkt = wakeup->magic_pkt; 2460 - __entry->gtk_rekey_failure = wakeup->gtk_rekey_failure; 2461 - __entry->eap_identity_req = wakeup->eap_identity_req; 2462 - __entry->four_way_handshake = wakeup->four_way_handshake; 2463 - __entry->rfkill_release = wakeup->rfkill_release; 2464 - __entry->pattern_idx = wakeup->pattern_idx; 2465 - __entry->packet_len = wakeup->packet_len; 2466 - if (wakeup->packet && wakeup->packet_present_len) 2458 + __entry->non_wireless = !wakeup; 2459 + __entry->disconnect = wakeup ? wakeup->disconnect : false; 2460 + __entry->magic_pkt = wakeup ? wakeup->magic_pkt : false; 2461 + __entry->gtk_rekey_failure = wakeup ? wakeup->gtk_rekey_failure : false; 2462 + __entry->eap_identity_req = wakeup ? wakeup->eap_identity_req : false; 2463 + __entry->four_way_handshake = wakeup ? wakeup->four_way_handshake : false; 2464 + __entry->rfkill_release = wakeup ? wakeup->rfkill_release : false; 2465 + __entry->pattern_idx = wakeup ? wakeup->pattern_idx : false; 2466 + __entry->packet_len = wakeup ? wakeup->packet_len : false; 2467 + if (wakeup && wakeup->packet && wakeup->packet_present_len) 2467 2468 memcpy(__get_dynamic_array(packet), wakeup->packet, 2468 2469 wakeup->packet_present_len); 2469 2470 ),