Loading net/mac80211/tx.c +8 −2 Original line number Original line Diff line number Diff line Loading @@ -3535,6 +3535,7 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, ieee80211_tx_result r; ieee80211_tx_result r; struct ieee80211_vif *vif = txq->vif; struct ieee80211_vif *vif = txq->vif; begin: spin_lock_bh(&fq->lock); spin_lock_bh(&fq->lock); if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) || if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) || Loading @@ -3551,11 +3552,12 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, if (skb) if (skb) goto out; goto out; begin: skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); if (!skb) if (!skb) goto out; goto out; spin_unlock_bh(&fq->lock); hdr = (struct ieee80211_hdr *)skb->data; hdr = (struct ieee80211_hdr *)skb->data; info = IEEE80211_SKB_CB(skb); info = IEEE80211_SKB_CB(skb); Loading Loading @@ -3600,8 +3602,11 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, skb = __skb_dequeue(&tx.skbs); skb = __skb_dequeue(&tx.skbs); if (!skb_queue_empty(&tx.skbs)) if (!skb_queue_empty(&tx.skbs)) { spin_lock_bh(&fq->lock); skb_queue_splice_tail(&tx.skbs, &txqi->frags); skb_queue_splice_tail(&tx.skbs, &txqi->frags); spin_unlock_bh(&fq->lock); } } } if (skb_has_frag_list(skb) && if (skb_has_frag_list(skb) && Loading Loading @@ -3640,6 +3645,7 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, } } IEEE80211_SKB_CB(skb)->control.vif = vif; IEEE80211_SKB_CB(skb)->control.vif = vif; return skb; out: out: spin_unlock_bh(&fq->lock); spin_unlock_bh(&fq->lock); Loading Loading
net/mac80211/tx.c +8 −2 Original line number Original line Diff line number Diff line Loading @@ -3535,6 +3535,7 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, ieee80211_tx_result r; ieee80211_tx_result r; struct ieee80211_vif *vif = txq->vif; struct ieee80211_vif *vif = txq->vif; begin: spin_lock_bh(&fq->lock); spin_lock_bh(&fq->lock); if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) || if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) || Loading @@ -3551,11 +3552,12 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, if (skb) if (skb) goto out; goto out; begin: skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); if (!skb) if (!skb) goto out; goto out; spin_unlock_bh(&fq->lock); hdr = (struct ieee80211_hdr *)skb->data; hdr = (struct ieee80211_hdr *)skb->data; info = IEEE80211_SKB_CB(skb); info = IEEE80211_SKB_CB(skb); Loading Loading @@ -3600,8 +3602,11 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, skb = __skb_dequeue(&tx.skbs); skb = __skb_dequeue(&tx.skbs); if (!skb_queue_empty(&tx.skbs)) if (!skb_queue_empty(&tx.skbs)) { spin_lock_bh(&fq->lock); skb_queue_splice_tail(&tx.skbs, &txqi->frags); skb_queue_splice_tail(&tx.skbs, &txqi->frags); spin_unlock_bh(&fq->lock); } } } if (skb_has_frag_list(skb) && if (skb_has_frag_list(skb) && Loading Loading @@ -3640,6 +3645,7 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, } } IEEE80211_SKB_CB(skb)->control.vif = vif; IEEE80211_SKB_CB(skb)->control.vif = vif; return skb; out: out: spin_unlock_bh(&fq->lock); spin_unlock_bh(&fq->lock); Loading