mwifiex: update tx_pkts_queued for requeued packets
authorXinming Hu <huxm@marvell.com>
Wed, 28 Sep 2016 12:48:26 +0000 (18:18 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 9 Nov 2016 01:33:26 +0000 (03:33 +0200)
wmm.tx_pkts_queued and ralist's total_pkt_count should be updated in
synchronization. They were not correctly updated in
mwifiex_send_processed_packet().

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/wmm.c

index dea2fe671dfe3ed5b419652476f6206e6acc8198..1ff3a87d5784a92f4b4dbd6eb287d3599255c9ca 100644 (file)
@@ -1334,9 +1334,11 @@ mwifiex_send_processed_packet(struct mwifiex_private *priv,
        skb = skb_dequeue(&ptr->skb_head);
 
        if (adapter->data_sent || adapter->tx_lock_flag) {
+               ptr->total_pkt_count--;
                spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
                                       ra_list_flags);
                skb_queue_tail(&adapter->tx_data_q, skb);
+               atomic_dec(&priv->wmm.tx_pkts_queued);
                atomic_inc(&adapter->tx_queued);
                return;
        }
@@ -1394,6 +1396,10 @@ mwifiex_send_processed_packet(struct mwifiex_private *priv,
        if (ret != -EBUSY) {
                mwifiex_rotate_priolists(priv, ptr, ptr_index);
                atomic_dec(&priv->wmm.tx_pkts_queued);
+               spin_lock_irqsave(&priv->wmm.ra_list_spinlock, ra_list_flags);
+               ptr->total_pkt_count--;
+               spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
+                                      ra_list_flags);
        }
 }