From: John W. Linville Date: Tue, 5 Jan 2010 22:18:59 +0000 (-0500) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=4f9b2a7dea2bf1dd81f280aa5e8a40ed910d2f0a;p=linux-beck.git Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 Conflicts: net/mac80211/iface.c --- 4f9b2a7dea2bf1dd81f280aa5e8a40ed910d2f0a diff --cc drivers/net/wireless/mwl8k.c index 23a5a3442623,59f92105b0c2..a04863633d1a --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c @@@ -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; } diff --cc net/mac80211/iface.c index 72189661fc49,c261cdb359eb..c20ddddc3f2b --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@@ -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,