mac80211: remove tx_frags driver callback
authorJohannes Berg <johannes.berg@intel.com>
Mon, 2 Jul 2012 13:40:18 +0000 (15:40 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 2 Jul 2012 13:40:18 +0000 (15:40 +0200)
The implementation of tx_frags is buggy due to
not handling queue stop, and there's no driver
implementing it so remove it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/driver-ops.h
net/mac80211/main.c
net/mac80211/tx.c

index b5da094468f17e20f6097fc7e9983ccb4bdc1165..dc2a97af95e77d4f74b8850e5e755b32fa3285f1 100644 (file)
@@ -1896,19 +1896,6 @@ enum ieee80211_rate_control_changed {
  *     The low-level driver should send the frame out based on
  *     configuration in the TX control data. This handler should,
  *     preferably, never fail and stop queues appropriately.
- *     This must be implemented if @tx_frags is not.
- *     Must be atomic.
- *
- * @tx_frags: Called to transmit multiple fragments of a single MSDU.
- *     This handler must consume all fragments, sending out some of
- *     them only is useless and it can't ask for some of them to be
- *     queued again. If the frame is not fragmented the queue has a
- *     single SKB only. To avoid issues with the networking stack
- *     when TX status is reported the frames should be removed from
- *     the skb queue.
- *     If this is used, the tx_info @vif and @sta pointers will be
- *     invalid -- you must not use them in that case.
- *     This must be implemented if @tx isn't.
  *     Must be atomic.
  *
  * @start: Called before the first netdevice attached to the hardware
@@ -2260,8 +2247,6 @@ enum ieee80211_rate_control_changed {
  */
 struct ieee80211_ops {
        void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
-       void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta, struct sk_buff_head *skbs);
        int (*start)(struct ieee80211_hw *hw);
        void (*stop)(struct ieee80211_hw *hw);
 #ifdef CONFIG_PM
index 44e8c1242781216587b3027616a854c0c4da923b..5042151a3325ae2788990fa7ab0b7195cfd7b918 100644 (file)
@@ -27,14 +27,6 @@ static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
        local->ops->tx(&local->hw, skb);
 }
 
-static inline void drv_tx_frags(struct ieee80211_local *local,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta,
-                               struct sk_buff_head *skbs)
-{
-       local->ops->tx_frags(&local->hw, vif, sta, skbs);
-}
-
 static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata,
                                      u32 sset, u8 *data)
 {
index ab32c59be8942ea633c47416ef302b64d6c6af89..c794101f8987f1227cdd71c656966e1ef6580b44 100644 (file)
@@ -587,7 +587,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
 
        local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
 
-       BUG_ON(!ops->tx && !ops->tx_frags);
+       BUG_ON(!ops->tx);
        BUG_ON(!ops->start);
        BUG_ON(!ops->stop);
        BUG_ON(!ops->config);
index 4990f4fb58642d51bd8ab1497d0581580ad0bddc..364a1e7b4afac5e7ac28643b3c53e421c3d65707 100644 (file)
@@ -1295,11 +1295,8 @@ static bool __ieee80211_tx(struct ieee80211_local *local,
                break;
        }
 
-       if (local->ops->tx_frags)
-               drv_tx_frags(local, vif, pubsta, skbs);
-       else
-               result = ieee80211_tx_frags(local, vif, pubsta, skbs,
-                                           txpending);
+       result = ieee80211_tx_frags(local, vif, pubsta, skbs,
+                                   txpending);
 
        ieee80211_tpt_led_trig_tx(local, fc, led_len);
        ieee80211_led_tx(local, 1);