Re: [PATCH v9 1/2] mac80211: Move ieee802111_tx_dequeue() to later in tx.c

2016-09-30 Thread Johannes Berg
On Thu, 2016-09-22 at 19:04 +0200, Toke Høiland-Jørgensen wrote:
> The TXQ path restructure requires ieee80211_tx_dequeue() to call TX
> handlers and parts of the xmit_fast path. Move the function to later
> in tx.c in preparation for this.
> 
Applied.

johannes


[PATCH v9 1/2] mac80211: Move ieee802111_tx_dequeue() to later in tx.c

2016-09-22 Thread Toke Høiland-Jørgensen
The TXQ path restructure requires ieee80211_tx_dequeue() to call TX
handlers and parts of the xmit_fast path. Move the function to later in
tx.c in preparation for this.

Signed-off-by: Toke Høiland-Jørgensen 
---
 net/mac80211/tx.c | 90 +++
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 61d302d..e8c9964 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1476,51 +1476,6 @@ void ieee80211_txq_teardown_flows(struct ieee80211_local 
*local)
spin_unlock_bh(>lock);
 }
 
-struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
-struct ieee80211_txq *txq)
-{
-   struct ieee80211_local *local = hw_to_local(hw);
-   struct txq_info *txqi = container_of(txq, struct txq_info, txq);
-   struct ieee80211_hdr *hdr;
-   struct sk_buff *skb = NULL;
-   struct fq *fq = >fq;
-   struct fq_tin *tin = >tin;
-
-   spin_lock_bh(>lock);
-
-   if (test_bit(IEEE80211_TXQ_STOP, >flags))
-   goto out;
-
-   skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func);
-   if (!skb)
-   goto out;
-
-   ieee80211_set_skb_vif(skb, txqi);
-
-   hdr = (struct ieee80211_hdr *)skb->data;
-   if (txq->sta && ieee80211_is_data_qos(hdr->frame_control)) {
-   struct sta_info *sta = container_of(txq->sta, struct sta_info,
-   sta);
-   struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-
-   hdr->seq_ctrl = ieee80211_tx_next_seq(sta, txq->tid);
-   if (test_bit(IEEE80211_TXQ_AMPDU, >flags))
-   info->flags |= IEEE80211_TX_CTL_AMPDU;
-   else
-   info->flags &= ~IEEE80211_TX_CTL_AMPDU;
-   }
-
-out:
-   spin_unlock_bh(>lock);
-
-   if (skb && skb_has_frag_list(skb) &&
-   !ieee80211_hw_check(>hw, TX_FRAG_LIST))
-   skb_linearize(skb);
-
-   return skb;
-}
-EXPORT_SYMBOL(ieee80211_tx_dequeue);
-
 static bool ieee80211_tx_frags(struct ieee80211_local *local,
   struct ieee80211_vif *vif,
   struct ieee80211_sta *sta,
@@ -3311,6 +3266,51 @@ static bool ieee80211_xmit_fast(struct 
ieee80211_sub_if_data *sdata,
return true;
 }
 
+struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
+struct ieee80211_txq *txq)
+{
+   struct ieee80211_local *local = hw_to_local(hw);
+   struct txq_info *txqi = container_of(txq, struct txq_info, txq);
+   struct ieee80211_hdr *hdr;
+   struct sk_buff *skb = NULL;
+   struct fq *fq = >fq;
+   struct fq_tin *tin = >tin;
+
+   spin_lock_bh(>lock);
+
+   if (test_bit(IEEE80211_TXQ_STOP, >flags))
+   goto out;
+
+   skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func);
+   if (!skb)
+   goto out;
+
+   ieee80211_set_skb_vif(skb, txqi);
+
+   hdr = (struct ieee80211_hdr *)skb->data;
+   if (txq->sta && ieee80211_is_data_qos(hdr->frame_control)) {
+   struct sta_info *sta = container_of(txq->sta, struct sta_info,
+   sta);
+   struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+
+   hdr->seq_ctrl = ieee80211_tx_next_seq(sta, txq->tid);
+   if (test_bit(IEEE80211_TXQ_AMPDU, >flags))
+   info->flags |= IEEE80211_TX_CTL_AMPDU;
+   else
+   info->flags &= ~IEEE80211_TX_CTL_AMPDU;
+   }
+
+out:
+   spin_unlock_bh(>lock);
+
+   if (skb && skb_has_frag_list(skb) &&
+   !ieee80211_hw_check(>hw, TX_FRAG_LIST))
+   skb_linearize(skb);
+
+   return skb;
+}
+EXPORT_SYMBOL(ieee80211_tx_dequeue);
+
 void __ieee80211_subif_start_xmit(struct sk_buff *skb,
  struct net_device *dev,
  u32 info_flags)
-- 
2.9.3