@@ -436,12 +436,11 @@ mt76_txq_stopped(struct mt76_queue *q)
436
436
437
437
static int
438
438
mt76_txq_send_burst (struct mt76_phy * phy , struct mt76_queue * q ,
439
- struct mt76_txq * mtxq )
439
+ struct mt76_txq * mtxq , struct mt76_wcid * wcid )
440
440
{
441
441
struct mt76_dev * dev = phy -> dev ;
442
442
struct ieee80211_txq * txq = mtxq_to_txq (mtxq );
443
443
enum mt76_txq_id qid = mt76_txq_get_qid (txq );
444
- struct mt76_wcid * wcid = mtxq -> wcid ;
445
444
struct ieee80211_tx_info * info ;
446
445
struct sk_buff * skb ;
447
446
int n_frames = 1 ;
@@ -527,8 +526,8 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
527
526
break ;
528
527
529
528
mtxq = (struct mt76_txq * )txq -> drv_priv ;
530
- wcid = mtxq -> wcid ;
531
- if (wcid && test_bit (MT_WCID_FLAG_PS , & wcid -> flags ))
529
+ wcid = rcu_dereference ( dev -> wcid [ mtxq -> wcid ]) ;
530
+ if (! wcid || test_bit (MT_WCID_FLAG_PS , & wcid -> flags ))
532
531
continue ;
533
532
534
533
if (mtxq -> send_bar && mtxq -> aggr ) {
@@ -543,7 +542,7 @@ mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
543
542
}
544
543
545
544
if (!mt76_txq_stopped (q ))
546
- n_frames = mt76_txq_send_burst (phy , q , mtxq );
545
+ n_frames = mt76_txq_send_burst (phy , q , mtxq , wcid );
547
546
548
547
ieee80211_return_txq (phy -> hw , txq , false);
549
548
0 commit comments