mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
rt2x00: separte clearing entry from rt2x00lib_txdone
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>
This commit is contained in:
parent
5edb05afeb
commit
56646adf9c
@ -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,
|
void rt2x00lib_txdone(struct queue_entry *entry,
|
||||||
struct txdone_entry_desc *txdesc)
|
struct txdone_entry_desc *txdesc)
|
||||||
{
|
{
|
||||||
@ -471,30 +497,11 @@ void rt2x00lib_txdone(struct queue_entry *entry,
|
|||||||
ieee80211_tx_status(rt2x00dev->hw, entry->skb);
|
ieee80211_tx_status(rt2x00dev->hw, entry->skb);
|
||||||
else
|
else
|
||||||
ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
|
ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
|
||||||
} else
|
} else {
|
||||||
dev_kfree_skb_any(entry->skb);
|
dev_kfree_skb_any(entry->skb);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
rt2x00lib_clear_entry(rt2x00dev, 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);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
|
EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user