rt2x00: separte clearing entry from rt2x00lib_txdone
authorStanislaw Gruszka <sgruszka@redhat.com>
Wed, 15 Feb 2017 09:25:07 +0000 (10:25 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 8 Mar 2017 15:05:51 +0000 (17:05 +0200)
This makes rt2x00lib_txdone a bit simpler and will allow to reuse
code in different variant of txdone which I'm preparing.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c

index b5d90fe..03b368a 100644 (file)
@@ -391,6 +391,32 @@ static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev,
        }
 }
 
+static void rt2x00lib_clear_entry(struct rt2x00_dev *rt2x00dev,
+                                 struct queue_entry *entry)
+{
+       /*
+        * Make this entry available for reuse.
+        */
+       entry->skb = NULL;
+       entry->flags = 0;
+
+       rt2x00dev->ops->lib->clear_entry(entry);
+
+       rt2x00queue_index_inc(entry, Q_INDEX_DONE);
+
+       /*
+        * If the data queue was below the threshold before the txdone
+        * handler we must make sure the packet queue in the mac80211 stack
+        * is reenabled when the txdone handler has finished. This has to be
+        * serialized with rt2x00mac_tx(), otherwise we can wake up queue
+        * before it was stopped.
+        */
+       spin_lock_bh(&entry->queue->tx_lock);
+       if (!rt2x00queue_threshold(entry->queue))
+               rt2x00queue_unpause_queue(entry->queue);
+       spin_unlock_bh(&entry->queue->tx_lock);
+}
+
 void rt2x00lib_txdone(struct queue_entry *entry,
                      struct txdone_entry_desc *txdesc)
 {
@@ -471,30 +497,11 @@ void rt2x00lib_txdone(struct queue_entry *entry,
                        ieee80211_tx_status(rt2x00dev->hw, entry->skb);
                else
                        ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
-       } else
+       } else {
                dev_kfree_skb_any(entry->skb);
+       }
 
-       /*
-        * Make this entry available for reuse.
-        */
-       entry->skb = NULL;
-       entry->flags = 0;
-
-       rt2x00dev->ops->lib->clear_entry(entry);
-
-       rt2x00queue_index_inc(entry, Q_INDEX_DONE);
-
-       /*
-        * If the data queue was below the threshold before the txdone
-        * handler we must make sure the packet queue in the mac80211 stack
-        * is reenabled when the txdone handler has finished. This has to be
-        * serialized with rt2x00mac_tx(), otherwise we can wake up queue
-        * before it was stopped.
-        */
-       spin_lock_bh(&entry->queue->tx_lock);
-       if (!rt2x00queue_threshold(entry->queue))
-               rt2x00queue_unpause_queue(entry->queue);
-       spin_unlock_bh(&entry->queue->tx_lock);
+       rt2x00lib_clear_entry(rt2x00dev, entry);
 }
 EXPORT_SYMBOL_GPL(rt2x00lib_txdone);