linux/net/mac80211
Emmanuel Grumbach 20932750d9 mac80211: don't update the PM state of a peer upon a multicast frame
I changed the way mac80211 updates the PM state of the peer.
I forgot that we could also have multicast frames from the
peer and that those frame should of course not change the
PM state of the peer: A peer goes to power save when it
needs to scan, but it won't send the broadcast Probe Request
with the PM bit set.

This made us mark the peer as awake when it wasn't and then
Intel's firmware would fail to transmit because the peer is
asleep according to its database. The driver warned about
this and it looked like this:

 WARNING: CPU: 0 PID: 184 at /usr/src/linux-4.16.14/drivers/net/wireless/intel/iwlwifi/mvm/tx.c:1369 iwl_mvm_rx_tx_cmd+0x53b/0x860
 CPU: 0 PID: 184 Comm: irq/124-iwlwifi Not tainted 4.16.14 #1
 RIP: 0010:iwl_mvm_rx_tx_cmd+0x53b/0x860
 Call Trace:
  iwl_pcie_rx_handle+0x220/0x880
  iwl_pcie_irq_handler+0x6c9/0xa20
  ? irq_forced_thread_fn+0x60/0x60
  ? irq_thread_dtor+0x90/0x90

The relevant code that spits the WARNING is:

        case TX_STATUS_FAIL_DEST_PS:
                /* the FW should have stopped the queue and not
                 * return this status
                 */
                WARN_ON(1);
                info->flags |= IEEE80211_TX_STAT_TX_FILTERED;

This fixes https://bugzilla.kernel.org/show_bug.cgi?id=199967.

Fixes: 9fef654433 ("mac80211: always update the PM state of a peer on MGMT / DATA frames")
Cc: <stable@vger.kernel.org>   #4.16+
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2018-08-28 11:12:42 +02:00
..
aead_api.c mac80211: use crypto_aead_authsize() 2017-10-11 15:46:45 +02:00
aead_api.h mac80211: aead api to reduce redundancy 2017-10-11 09:37:35 +02:00
aes_ccm.h mac80211: aead api to reduce redundancy 2017-10-11 09:37:35 +02:00
aes_cmac.c mac80211: aes-cmac: switch to shash CMAC driver 2017-02-08 09:19:33 +01:00
aes_cmac.h mac80211: aes-cmac: switch to shash CMAC driver 2017-02-08 09:19:33 +01:00
aes_gcm.h mac80211: aead api to reduce redundancy 2017-10-11 09:37:35 +02:00
aes_gmac.c mac80211: move struct aead_req off the stack 2016-10-17 16:14:04 +02:00
aes_gmac.h mac80211: move struct aead_req off the stack 2016-10-17 16:14:04 +02:00
agg-rx.c mac80211: agg-rx: Accept ADDBA request update if timeout did not change 2018-02-27 11:06:04 +01:00
agg-tx.c mac80211: use timeout from the AddBA response instead of the request 2018-05-07 20:35:15 +02:00
cfg.c mac80211: allocate and fill tidstats only when needed 2018-05-18 11:40:44 +02:00
chan.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
debug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs_key.c mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
debugfs_key.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs_netdev.c networking: convert many more places to skb_put_zero() 2017-06-16 11:48:35 -04:00
debugfs_netdev.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs_sta.c mac80211: Add txq flags to debugfs 2018-01-31 12:57:24 +01:00
debugfs_sta.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-03-23 11:31:58 -04:00
debugfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
driver-ops.c mac80211: add offset_tsf driver op and use it for mesh 2016-09-30 13:45:44 +02:00
driver-ops.h mac80211: Support adding duration for prepare_tx() callback 2018-05-23 11:06:10 +02:00
ethtool.c mac80211: allocate and fill tidstats only when needed 2018-05-18 11:40:44 +02:00
fils_aead.c Some more updates: 2017-02-10 14:31:51 -05:00
fils_aead.h mac80211: FILS AEAD protection for station mode association frames 2016-10-27 16:03:25 +02:00
ht.c mac80211: fix TX aggregation stop race 2018-05-18 11:14:36 +02:00
ibss.c mac80211: Send control port frames over nl80211 2018-03-29 14:08:30 +02:00
ieee80211_i.h mac80211: Support the new cfg80211 TXQ stats API 2018-05-08 13:25:22 +02:00
iface.c mac80211: Send control port frames over nl80211 2018-03-29 14:08:30 +02:00
Kconfig mac80211: fils_aead: Use crypto api CMAC shash rather than bare cipher 2017-02-08 09:19:17 +01:00
key.c mac80211: allow AP_VLAN operation on crypto controlled devices 2018-03-29 11:35:22 +02:00
key.h mac80211: aes-cmac: switch to shash CMAC driver 2017-02-08 09:19:33 +01:00
led.c mac80211: Convert timers to use timer_setup() 2017-11-20 16:55:11 +01:00
led.h mac80211: make LED triggering depend on activation 2015-05-05 14:21:56 +02:00
main.c mac80211: correct use of IEEE80211_VHT_CAP_RXSTBC_X 2018-08-28 11:08:59 +02:00
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-11-04 09:26:51 +09:00
mesh_hwmp.c mac80211: mark expected switch fall-throughs 2017-12-11 12:16:04 +01:00
mesh_pathtbl.c rhashtable: Change rhashtable_walk_start to return void 2017-12-11 09:58:38 -05:00
mesh_plink.c mac80211: mesh: fix premature update of rc stats 2018-05-18 10:02:28 +02:00
mesh_ps.c networking: make skb_put & friends return void pointers 2017-06-16 11:48:39 -04:00
mesh_sync.c mac80211: Use appropriate name for functions and messages 2016-12-13 16:22:27 +01:00
mesh.c mac80211: notify driver for change in multicast rates 2018-03-23 13:23:17 +01:00
mesh.h mac80211: Convert timers to use timer_setup() 2017-11-20 16:55:11 +01:00
michael.c mac80211: add get TID helper 2018-02-22 21:13:03 +01:00
michael.h
mlme.c mac80211: Support adding duration for prepare_tx() callback 2018-05-23 11:06:10 +02:00
ocb.c mac80211: Convert timers to use timer_setup() 2017-11-20 16:55:11 +01:00
offchannel.c mac80211: mark expected switch fall-throughs 2017-12-11 12:16:04 +01:00
pm.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rate.c mac80211: Dynamically set CoDel parameters per station 2017-05-17 16:03:40 +02:00
rate.h mac80211: make rate control tx status API more extensible 2017-04-28 10:57:33 +02:00
rc80211_minstrel_debugfs.c net: Use octal not symbolic permissions 2018-03-26 12:07:48 -04:00
rc80211_minstrel_ht_debugfs.c net: Use octal not symbolic permissions 2018-03-26 12:07:48 -04:00
rc80211_minstrel_ht.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
rc80211_minstrel_ht.h mac80211: minstrel_ht: move supported bitrate mask out of group data 2016-12-15 11:07:52 +01:00
rc80211_minstrel.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
rc80211_minstrel.h mac80211: minstrel: make prob_ewma u16 instead of u32 2016-12-15 11:07:53 +01:00
rx.c mac80211: don't update the PM state of a peer upon a multicast frame 2018-08-28 11:12:42 +02:00
scan.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
spectmgmt.c mac80211: Do not disconnect on invalid operating class 2018-02-19 14:53:14 +01:00
sta_info.c mac80211: allocate and fill tidstats only when needed 2018-05-18 11:40:44 +02:00
sta_info.h mac80211: allocate and fill tidstats only when needed 2018-05-18 11:40:44 +02:00
status.c mac80211: average ack rssi support for data frames 2018-05-07 21:41:16 +02:00
tdls.c mac80211: enable TDLS peer buffer STA feature 2017-12-11 12:16:05 +01:00
tkip.c mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
tkip.h mac80211: move TKIP TX IVs to public part of key struct 2016-02-24 09:04:38 +01:00
trace_msg.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
trace.h mac80211: Support adding duration for prepare_tx() callback 2018-05-23 11:06:10 +02:00
tx.c mac80211: disable BHs/preemption in ieee80211_tx_control_port() 2018-06-29 09:39:08 +02:00
util.c cfg80211: make wmm_rule part of the reg_rule structure 2018-08-28 11:11:47 +02:00
vht.c mac80211: Use proper chan_width enum in sta opmode event 2018-03-29 10:19:59 +02:00
wep.c mac80211: Add RX flag to indicate ICV stripped 2017-01-12 10:15:18 +01:00
wep.h
wme.c mac80211: mark expected switch fall-throughs 2017-12-11 12:16:04 +01:00
wme.h
wpa.c mac80211: add get TID helper 2018-02-22 21:13:03 +01:00
wpa.h mac80111: Add BIP-GMAC-128 and BIP-GMAC-256 ciphers 2015-01-27 11:10:13 +01:00