mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: add timeout handling for status skbs
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
|
||||
#define MT7603_PRE_TBTT_TIME 5000 /* ms */
|
||||
|
||||
#define MT7603_STATUS_TIMEOUT (10 * HZ)
|
||||
#define MT7603_WATCHDOG_TIME 100 /* ms */
|
||||
#define MT7603_WATCHDOG_TIMEOUT 10 /* number of checks */
|
||||
|
||||
@@ -85,6 +86,7 @@ struct mt7603_vif {
|
||||
#define MT7603_CB_TXS_FAILED BIT(2)
|
||||
|
||||
struct mt7603_cb {
|
||||
unsigned long jiffies;
|
||||
u8 wcid;
|
||||
u8 pktid;
|
||||
u8 flags;
|
||||
|
||||
@@ -704,6 +704,7 @@ mt7603_add_tx_status_skb(struct mt7603_dev *dev, struct mt7603_sta *msta,
|
||||
pid = msta->pid;
|
||||
cb->wcid = msta->wcid.idx;
|
||||
cb->pktid = pid;
|
||||
cb->jiffies = jiffies;
|
||||
|
||||
__skb_queue_tail(&dev->status_list, skb);
|
||||
|
||||
@@ -1123,8 +1124,21 @@ mt7603_watchdog_check(struct mt7603_dev *dev, u8 *counter,
|
||||
void mt7603_mac_work(struct work_struct *work)
|
||||
{
|
||||
struct mt7603_dev *dev = container_of(work, struct mt7603_dev, mac_work.work);
|
||||
struct sk_buff *skb;
|
||||
int time = MT7603_WATCHDOG_TIME;
|
||||
|
||||
spin_lock_bh(&dev->status_lock);
|
||||
while ((skb = skb_peek(&dev->status_list)) != NULL) {
|
||||
struct mt7603_cb *cb = mt7603_skb_cb(skb);
|
||||
if (time_is_after_jiffies(cb->jiffies + MT7603_STATUS_TIMEOUT))
|
||||
break;
|
||||
|
||||
__skb_unlink(skb, &dev->status_list);
|
||||
mt7603_skb_done(dev, skb,
|
||||
MT7603_CB_TXS_FAILED | MT7603_CB_TXS_DONE);
|
||||
}
|
||||
spin_unlock_bh(&dev->status_lock);
|
||||
|
||||
mutex_lock(&dev->mutex);
|
||||
|
||||
if (WARN_ON_ONCE(mt7603_watchdog_check(dev, &dev->tx_check,
|
||||
|
||||
Reference in New Issue
Block a user