Loading include/net/mac80211.h +15 −0 Original line number Diff line number Diff line Loading @@ -5467,4 +5467,19 @@ void ieee80211_unreserve_tid(struct ieee80211_sta *sta, u8 tid); */ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, struct ieee80211_txq *txq); /** * ieee80211_txq_get_depth - get pending frame/byte count of given txq * * The values are not guaranteed to be coherent with regard to each other, i.e. * txq state can change half-way of this function and the caller may end up * with "new" frame_cnt and "old" byte_cnt or vice-versa. * * @txq: pointer obtained from station or virtual interface * @frame_cnt: pointer to store frame count * @byte_cnt: pointer to store byte count */ void ieee80211_txq_get_depth(struct ieee80211_txq *txq, unsigned long *frame_cnt, unsigned long *byte_cnt); #endif /* MAC80211_H */ net/mac80211/ieee80211_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,7 @@ enum txq_info_flags { struct txq_info { struct sk_buff_head queue; unsigned long flags; unsigned long byte_cnt; /* keep last! */ struct ieee80211_txq txq; Loading net/mac80211/iface.c +1 −0 Original line number Diff line number Diff line Loading @@ -979,6 +979,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, spin_lock_bh(&txqi->queue.lock); ieee80211_purge_tx_queue(&local->hw, &txqi->queue); txqi->byte_cnt = 0; spin_unlock_bh(&txqi->queue.lock); atomic_set(&sdata->txqs_len[txqi->txq.ac], 0); Loading net/mac80211/sta_info.c +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ static void __cleanup_single_sta(struct sta_info *sta) ieee80211_purge_tx_queue(&local->hw, &txqi->queue); atomic_sub(n, &sdata->txqs_len[txqi->txq.ac]); txqi->byte_cnt = 0; } } Loading net/mac80211/tx.c +7 −1 Original line number Diff line number Diff line Loading @@ -1266,7 +1266,11 @@ static void ieee80211_drv_tx(struct ieee80211_local *local, if (atomic_read(&sdata->txqs_len[ac]) >= local->hw.txq_ac_max_pending) netif_stop_subqueue(sdata->dev, ac); skb_queue_tail(&txqi->queue, skb); spin_lock_bh(&txqi->queue.lock); txqi->byte_cnt += skb->len; __skb_queue_tail(&txqi->queue, skb); spin_unlock_bh(&txqi->queue.lock); drv_wake_tx_queue(local, txqi); return; Loading Loading @@ -1294,6 +1298,8 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, if (!skb) goto out; txqi->byte_cnt -= skb->len; atomic_dec(&sdata->txqs_len[ac]); if (__netif_subqueue_stopped(sdata->dev, ac)) ieee80211_propagate_queue_wake(local, sdata->vif.hw_queue[ac]); Loading Loading
include/net/mac80211.h +15 −0 Original line number Diff line number Diff line Loading @@ -5467,4 +5467,19 @@ void ieee80211_unreserve_tid(struct ieee80211_sta *sta, u8 tid); */ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, struct ieee80211_txq *txq); /** * ieee80211_txq_get_depth - get pending frame/byte count of given txq * * The values are not guaranteed to be coherent with regard to each other, i.e. * txq state can change half-way of this function and the caller may end up * with "new" frame_cnt and "old" byte_cnt or vice-versa. * * @txq: pointer obtained from station or virtual interface * @frame_cnt: pointer to store frame count * @byte_cnt: pointer to store byte count */ void ieee80211_txq_get_depth(struct ieee80211_txq *txq, unsigned long *frame_cnt, unsigned long *byte_cnt); #endif /* MAC80211_H */
net/mac80211/ieee80211_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,7 @@ enum txq_info_flags { struct txq_info { struct sk_buff_head queue; unsigned long flags; unsigned long byte_cnt; /* keep last! */ struct ieee80211_txq txq; Loading
net/mac80211/iface.c +1 −0 Original line number Diff line number Diff line Loading @@ -979,6 +979,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, spin_lock_bh(&txqi->queue.lock); ieee80211_purge_tx_queue(&local->hw, &txqi->queue); txqi->byte_cnt = 0; spin_unlock_bh(&txqi->queue.lock); atomic_set(&sdata->txqs_len[txqi->txq.ac], 0); Loading
net/mac80211/sta_info.c +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ static void __cleanup_single_sta(struct sta_info *sta) ieee80211_purge_tx_queue(&local->hw, &txqi->queue); atomic_sub(n, &sdata->txqs_len[txqi->txq.ac]); txqi->byte_cnt = 0; } } Loading
net/mac80211/tx.c +7 −1 Original line number Diff line number Diff line Loading @@ -1266,7 +1266,11 @@ static void ieee80211_drv_tx(struct ieee80211_local *local, if (atomic_read(&sdata->txqs_len[ac]) >= local->hw.txq_ac_max_pending) netif_stop_subqueue(sdata->dev, ac); skb_queue_tail(&txqi->queue, skb); spin_lock_bh(&txqi->queue.lock); txqi->byte_cnt += skb->len; __skb_queue_tail(&txqi->queue, skb); spin_unlock_bh(&txqi->queue.lock); drv_wake_tx_queue(local, txqi); return; Loading Loading @@ -1294,6 +1298,8 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, if (!skb) goto out; txqi->byte_cnt -= skb->len; atomic_dec(&sdata->txqs_len[ac]); if (__netif_subqueue_stopped(sdata->dev, ac)) ieee80211_propagate_queue_wake(local, sdata->vif.hw_queue[ac]); Loading