ath10k: reduce warning messages during rx without proper channel context
authorMohammed Shafi Shajakhan <mohammed@qti.qualcomm.com>
Mon, 23 May 2016 20:12:46 +0000 (23:12 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 24 May 2016 17:53:23 +0000 (20:53 +0300)
WARN_ON_ONCE when we receive packets for self peer when mac80211
had not assigned a proper channel context. This scenario happens
in QCA4019 when we start the AP via hostapd in background and start
it once again in the background without killing the previous instance!
This happens intermittently when we start / stop hostapd in a while loop
(incase the hostapd is not properly killed).  This results in mac80211
chancontext to be unassigned, while the self peer continuous receive
packets in target operating channel. This results in lot of call traces
in the rx path. Make this as a WARN_ON_ONCE to avoid flooding the console
which result in rebooting low memory systems, while still reporting the
warning once that we are receiving packets in target operating channel and
to indicate that something is happening which is not the expected result.

WARNING: CPU: 0 PID: 0 at ath/ath10k/htt_rx.c:803
[<c0318838>] (warn_slowpath_null) from [<bf4a0104>]
(ath10k_htt_rx_h_channel+0xe0/0x1b8 [ath10k_core])
[<bf4a0104>] (ath10k_htt_rx_h_channel [ath10k_core]) from
[<bf4a025c>] (ath10k_htt_rx_h_ppdu+0x80/0x288 [ath10k_core])
[<bf4a025c>] (ath10k_htt_rx_h_ppdu [ath10k_core]) from
[<bf4a1a9c>] (ath10k_htt_txrx_compl_task+0x724/0x9d4 [ath10k_core])
[<bf4a1a9c>] (ath10k_htt_txrx_compl_task [ath10k_core])

Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/htt_rx.c

index 7411b69fde42f22fa0b7d87b14fba5c259ca5930..3e556e00a69a94b483bfbcb3131c20fcd1efde8e 100644 (file)
@@ -748,7 +748,7 @@ ath10k_htt_rx_h_peer_channel(struct ath10k *ar, struct htt_rx_desc *rxd)
        if (WARN_ON_ONCE(!arvif))
                return NULL;
 
-       if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
+       if (WARN_ON_ONCE(ath10k_mac_vif_chan(arvif->vif, &def)))
                return NULL;
 
        return def.chan;