Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
authorJohn W. Linville <linville@tuxdriver.com>
Tue, 5 Jan 2010 22:18:59 +0000 (17:18 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 5 Jan 2010 22:18:59 +0000 (17:18 -0500)
Conflicts:
net/mac80211/iface.c

13 files changed:
1  2 
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/iwlwifi/iwl-4965.c
drivers/net/wireless/mwl8k.c
drivers/net/wireless/rt2x00/rt2800lib.c
drivers/net/wireless/rt2x00/rt2x00.h
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt2x00queue.c
drivers/net/wireless/zd1211rw/zd_mac.c
net/mac80211/iface.c
net/mac80211/rx.c
net/mac80211/tx.c
net/mac80211/util.c
net/wireless/reg.c

index 23a5a3442623eb9603092726ce6b1023c2445bfd,59f92105b0c24880980af6339f6589f469eefa52..a04863633d1a5960b1f283518ea38b8703be0285
@@@ -3196,11 -3157,13 +3196,13 @@@ static void mwl8k_configure_filter(stru
        /* Clear unsupported feature flags */
        *total_flags &= FIF_ALLMULTI | FIF_BCN_PRBRESP_PROMISC;
  
-       if (mwl8k_fw_lock(hw))
+       if (mwl8k_fw_lock(hw)) {
+               kfree(cmd);
                return;
+       }
  
        if (priv->sniffer_enabled) {
 -              mwl8k_enable_sniffer(hw, 0);
 +              mwl8k_cmd_enable_sniffer(hw, 0);
                priv->sniffer_enabled = false;
        }
  
Simple merge
index 72189661fc4910af4d473b17a9d41ee51864fa83,c261cdb359ebbff176245430761512dc743b084c..c20ddddc3f2bf6852f0c5bd1167be3f24ab067ba
@@@ -665,9 -659,35 +673,35 @@@ static const struct net_device_ops ieee
        .ndo_start_xmit         = ieee80211_subif_start_xmit,
        .ndo_set_multicast_list = ieee80211_set_multicast_list,
        .ndo_change_mtu         = ieee80211_change_mtu,
 -      .ndo_set_mac_address    = eth_mac_addr,
 +      .ndo_set_mac_address    = ieee80211_change_mac,
+       .ndo_select_queue       = ieee80211_netdev_select_queue,
  };
  
+ static u16 ieee80211_monitor_select_queue(struct net_device *dev,
+                                         struct sk_buff *skb)
+ {
+       struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+       struct ieee80211_local *local = sdata->local;
+       struct ieee80211_hdr *hdr;
+       struct ieee80211_radiotap_header *rtap = (void *)skb->data;
+       if (local->hw.queues < 4)
+               return 0;
+       if (skb->len < 4 ||
+           skb->len < rtap->it_len + 2 /* frame control */)
+               return 0; /* doesn't matter, frame will be dropped */
+       hdr = (void *)((u8 *)skb->data + rtap->it_len);
+       if (!ieee80211_is_data(hdr->frame_control)) {
+               skb->priority = 7;
+               return ieee802_1d_to_ac[skb->priority];
+       }
+       return ieee80211_downgrade_queue(local, skb);
+ }
  static const struct net_device_ops ieee80211_monitorif_ops = {
        .ndo_open               = ieee80211_open,
        .ndo_stop               = ieee80211_stop,
Simple merge
Simple merge
Simple merge
Simple merge