Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
authorJohn W. Linville <linville@tuxdriver.com>
Wed, 6 Mar 2013 15:21:17 +0000 (10:21 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 6 Mar 2013 15:21:17 +0000 (10:21 -0500)
1  2 
net/mac80211/tx.c
net/wireless/core.c

diff --combined net/mac80211/tx.c
index ce78d1149f1dc2e873eb4291ce9459b40a89b4db,0d74f24595850919b1532887e659822ad2078695..8914d2d2881aab77c5741479d6dbf516db59e3b3
@@@ -2038,14 -2038,24 +2038,14 @@@ netdev_tx_t ieee80211_subif_start_xmit(
                skb = skb_clone(skb, GFP_ATOMIC);
                if (skb) {
                        unsigned long flags;
 -                      int id, r;
 +                      int id;
  
                        spin_lock_irqsave(&local->ack_status_lock, flags);
 -                      r = idr_get_new_above(&local->ack_status_frames,
 -                                            orig_skb, 1, &id);
 -                      if (r == -EAGAIN) {
 -                              idr_pre_get(&local->ack_status_frames,
 -                                          GFP_ATOMIC);
 -                              r = idr_get_new_above(&local->ack_status_frames,
 -                                                    orig_skb, 1, &id);
 -                      }
 -                      if (WARN_ON(!id) || id > 0xffff) {
 -                              idr_remove(&local->ack_status_frames, id);
 -                              r = -ERANGE;
 -                      }
 +                      id = idr_alloc(&local->ack_status_frames, orig_skb,
 +                                     1, 0x10000, GFP_ATOMIC);
                        spin_unlock_irqrestore(&local->ack_status_lock, flags);
  
 -                      if (!r) {
 +                      if (id >= 0) {
                                info_id = id;
                                info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
                        } else if (skb_shared(skb)) {
@@@ -2745,7 -2755,8 +2745,8 @@@ ieee80211_get_buffered_bc(struct ieee80
                                cpu_to_le16(IEEE80211_FCTL_MOREDATA);
                }
  
-               sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev);
+               if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+                       sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev);
                if (!ieee80211_tx_prepare(sdata, &tx, skb))
                        break;
                dev_kfree_skb_any(skb);
diff --combined net/wireless/core.c
index 5ffff039b0174eefb8f3967dc6f5307ea7cb2f8c,9220021050624d681f0fa9b842b73d07ccebcff9..ea4155fe97334f91794dbb7a55f0dab28219c2a3
@@@ -367,8 -367,7 +367,7 @@@ struct wiphy *wiphy_new(const struct cf
        rdev->wiphy.rts_threshold = (u32) -1;
        rdev->wiphy.coverage_class = 0;
  
-       rdev->wiphy.features = NL80211_FEATURE_SCAN_FLUSH |
-                              NL80211_FEATURE_ADVERTISE_CHAN_LIMITS;
+       rdev->wiphy.features = NL80211_FEATURE_SCAN_FLUSH;
  
        return &rdev->wiphy;
  }
@@@ -875,7 -874,8 +874,7 @@@ static int cfg80211_netdev_notifier_cal
                /* allow mac80211 to determine the timeout */
                wdev->ps_timeout = -1;
  
 -              if (!dev->ethtool_ops)
 -                      dev->ethtool_ops = &cfg80211_ethtool_ops;
 +              netdev_set_default_ethtool_ops(dev, &cfg80211_ethtool_ops);
  
                if ((wdev->iftype == NL80211_IFTYPE_STATION ||
                     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||