]> git.baikalelectronics.ru Git - kernel.git/commitdiff
iwl4965: do not process non-QOS frames on txq->sched_retry path
authorStanislaw Gruszka <stf_xl@wp.pl>
Tue, 19 Jan 2021 10:06:21 +0000 (11:06 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 25 Jan 2021 14:43:27 +0000 (16:43 +0200)
We have already WARN_ON(!qc) for non-QOS frame on txq->sched_retry path,
but we continue to process, what makes no sense since tid is not
initialized. Non QOS frame should never happen when aggregation
is enabled on queue, so do not process that.

Patch should fix smatch warning:
drivers/net/wireless/intel/iwlegacy/4965-mac.c:2822 il4965_hdl_tx() error: uninitialized symbol 'tid'.

Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210119100621.439134-1-stf_xl@wp.pl
drivers/net/wireless/intel/iwlegacy/4965-mac.c

index 28675a4ad8612f71ac5a5fed79602bd58569cb7d..98cd06287b4368f5894512ab022bd9e89ee900e7 100644 (file)
@@ -2813,8 +2813,10 @@ il4965_hdl_tx(struct il_priv *il, struct il_rx_buf *rxb)
        spin_lock_irqsave(&il->sta_lock, flags);
        if (txq->sched_retry) {
                const u32 scd_ssn = il4965_get_scd_ssn(tx_resp);
-               struct il_ht_agg *agg = NULL;
-               WARN_ON(!qc);
+               struct il_ht_agg *agg;
+
+               if (WARN_ON(!qc))
+                       goto out;
 
                agg = &il->stations[sta_id].tid[tid].agg;
 
@@ -2830,9 +2832,7 @@ il4965_hdl_tx(struct il_priv *il, struct il_rx_buf *rxb)
                        D_TX_REPLY("Retry scheduler reclaim scd_ssn "
                                   "%d idx %d\n", scd_ssn, idx);
                        freed = il4965_tx_queue_reclaim(il, txq_id, idx);
-                       if (qc)
-                               il4965_free_tfds_in_queue(il, sta_id, tid,
-                                                         freed);
+                       il4965_free_tfds_in_queue(il, sta_id, tid, freed);
 
                        if (il->mac80211_registered &&
                            il_queue_space(&txq->q) > txq->q.low_mark &&
@@ -2862,6 +2862,7 @@ il4965_hdl_tx(struct il_priv *il, struct il_rx_buf *rxb)
                    il_queue_space(&txq->q) > txq->q.low_mark)
                        il_wake_queue(il, txq);
        }
+out:
        if (qc && likely(sta_id != IL_INVALID_STATION))
                il4965_txq_check_empty(il, sta_id, tid, txq_id);