--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
-@@ -1025,7 +1025,11 @@ static struct drm_driver driver = {
+@@ -1030,7 +1030,11 @@ static struct drm_driver driver = {
*/
.driver_features =
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/
.load = i915_driver_load,
.unload = i915_driver_unload,
.open = i915_driver_open,
-@@ -1048,10 +1052,12 @@ static struct drm_driver driver = {
+@@ -1053,10 +1057,12 @@ static struct drm_driver driver = {
.gem_free_object = i915_gem_free_object,
.gem_vm_ops = &i915_gem_vm_ops,
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -1689,7 +1689,7 @@ static const struct net_device_ops hwsim
+@@ -1695,7 +1695,7 @@ static const struct net_device_ops hwsim
static void hwsim_mon_setup(struct net_device *dev)
{
strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1007,7 +1007,7 @@ static void ieee80211_if_setup(struct ne
+@@ -1017,7 +1017,7 @@ static void ieee80211_if_setup(struct ne
{
ether_setup(dev);
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
dev->destructor = free_netdev;
}
-@@ -1170,7 +1170,7 @@ static void ieee80211_setup_sdata(struct
+@@ -1180,7 +1180,7 @@ static void ieee80211_setup_sdata(struct
/* only monitor/p2p-device differ */
if (sdata->dev) {
sdata->dev->type = ARPHRD_ETHER;
}
-@@ -1208,7 +1208,7 @@ static void ieee80211_setup_sdata(struct
+@@ -1218,7 +1218,7 @@ static void ieee80211_setup_sdata(struct
break;
case NL80211_IFTYPE_MONITOR:
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
* For RX we handle drivers that zero-pad to end-of-packet.
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1008,6 +1008,11 @@ static void ieee80211_if_setup(struct ne
+@@ -1018,6 +1018,11 @@ static void ieee80211_if_setup(struct ne
ether_setup(dev);
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
netdev_attach_ops(dev, &ieee80211_dataif_ops);
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1508,6 +1508,7 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -1518,6 +1518,7 @@ int ieee80211_if_add(struct ieee80211_lo
return -ENOMEM;
dev_net_set(ndev, wiphy_net(local->hw.wiphy));
ndev->needed_headroom = local->tx_headroom +
4*6 /* four MAC addresses */
+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
-@@ -1516,6 +1517,7 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -1526,6 +1527,7 @@ int ieee80211_if_add(struct ieee80211_lo
- ETH_HLEN /* ethernet hard_header_len */
+ IEEE80211_ENCRYPT_HEADROOM;
ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -2013,10 +2013,10 @@ static int hwsim_register_received_nl(st
+@@ -2019,10 +2019,10 @@ static int hwsim_register_received_nl(st
if (info == NULL)
goto out;
return 0;
out:
-@@ -2053,7 +2053,7 @@ static int mac80211_hwsim_netlink_notify
+@@ -2059,7 +2059,7 @@ static int mac80211_hwsim_netlink_notify
if (state != NETLINK_URELEASE)
return NOTIFY_DONE;
NL80211_CMD_GET_REG);
if (!hdr)
goto put_failure;
-@@ -5545,7 +5545,7 @@ static int nl80211_send_bss(struct sk_bu
+@@ -5558,7 +5558,7 @@ static int nl80211_send_bss(struct sk_bu
ASSERT_WDEV_LOCK(wdev);
NL80211_CMD_NEW_SCAN_RESULTS);
if (!hdr)
return -1;
-@@ -5776,7 +5776,7 @@ static int nl80211_dump_survey(struct sk
+@@ -5789,7 +5789,7 @@ static int nl80211_dump_survey(struct sk
}
if (nl80211_send_survey(skb,
cb->nlh->nlmsg_seq, NLM_F_MULTI,
netdev,
&survey) < 0)
-@@ -6435,7 +6435,7 @@ static int nl80211_testmode_dump(struct
+@@ -6448,7 +6448,7 @@ static int nl80211_testmode_dump(struct
}
while (1) {
cb->nlh->nlmsg_seq, NLM_F_MULTI,
NL80211_CMD_TESTMODE);
struct nlattr *tmdata;
-@@ -6514,7 +6514,7 @@ struct sk_buff *cfg80211_testmode_alloc_
+@@ -6527,7 +6527,7 @@ struct sk_buff *cfg80211_testmode_alloc_
return NULL;
return __cfg80211_testmode_alloc_skb(rdev, approxlen,
rdev->testmode_info->snd_seq,
GFP_KERNEL);
}
-@@ -6874,7 +6874,7 @@ static int nl80211_remain_on_channel(str
+@@ -6887,7 +6887,7 @@ static int nl80211_remain_on_channel(str
if (!msg)
return -ENOMEM;
NL80211_CMD_REMAIN_ON_CHANNEL);
if (IS_ERR(hdr)) {
-@@ -7093,7 +7093,7 @@ static int nl80211_register_mgmt(struct
+@@ -7106,7 +7106,7 @@ static int nl80211_register_mgmt(struct
if (!rdev->ops->mgmt_tx)
return -EOPNOTSUPP;
nla_data(info->attrs[NL80211_ATTR_FRAME_MATCH]),
nla_len(info->attrs[NL80211_ATTR_FRAME_MATCH]));
}
-@@ -7163,7 +7163,7 @@ static int nl80211_tx_mgmt(struct sk_buf
+@@ -7176,7 +7176,7 @@ static int nl80211_tx_mgmt(struct sk_buf
if (!msg)
return -ENOMEM;
NL80211_CMD_FRAME);
if (IS_ERR(hdr)) {
-@@ -7278,7 +7278,7 @@ static int nl80211_get_power_save(struct
+@@ -7291,7 +7291,7 @@ static int nl80211_get_power_save(struct
if (!msg)
return -ENOMEM;
NL80211_CMD_GET_POWER_SAVE);
if (!hdr) {
err = -ENOBUFS;
-@@ -7570,7 +7570,7 @@ static int nl80211_get_wowlan(struct sk_
+@@ -7583,7 +7583,7 @@ static int nl80211_get_wowlan(struct sk_
if (!msg)
return -ENOMEM;
NL80211_CMD_GET_WOWLAN);
if (!hdr)
goto nla_put_failure;
-@@ -7994,7 +7994,7 @@ static int nl80211_register_unexpected_f
+@@ -8007,7 +8007,7 @@ static int nl80211_register_unexpected_f
if (wdev->ap_unexpected_nlportid)
return -EBUSY;
return 0;
}
-@@ -8024,7 +8024,7 @@ static int nl80211_probe_client(struct s
+@@ -8037,7 +8037,7 @@ static int nl80211_probe_client(struct s
if (!msg)
return -ENOMEM;
NL80211_CMD_PROBE_CLIENT);
if (IS_ERR(hdr)) {
-@@ -8068,13 +8068,13 @@ static int nl80211_register_beacons(stru
+@@ -8081,13 +8081,13 @@ static int nl80211_register_beacons(stru
/* First, check if already registered. */
spin_lock_bh(&rdev->beacon_registrations_lock);
list_for_each_entry(reg, &rdev->beacon_registrations, list) {
list_add(&nreg->list, &rdev->beacon_registrations);
spin_unlock_bh(&rdev->beacon_registrations_lock);
-@@ -8158,7 +8158,7 @@ static int nl80211_get_protocol_features
+@@ -8160,7 +8160,7 @@ static int nl80211_get_protocol_features
if (!msg)
return -ENOMEM;
NL80211_CMD_GET_PROTOCOL_FEATURES);
if (!hdr)
goto nla_put_failure;
-@@ -10563,12 +10563,12 @@ static int nl80211_netlink_notify(struct
+@@ -10565,12 +10565,12 @@ static int nl80211_netlink_notify(struct
list_for_each_entry_rcu(rdev, &cfg80211_rdev_list, list) {
list_for_each_entry_rcu(wdev, &rdev->wdev_list, list)
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -6727,7 +6727,9 @@ static int nl80211_wiphy_netns(struct sk
+@@ -6740,7 +6740,9 @@ static int nl80211_wiphy_netns(struct sk
if (!net_eq(wiphy_net(&rdev->wiphy), net))
err = cfg80211_switch_netns(rdev, net);
static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
{
-@@ -338,7 +340,9 @@ struct wiphy *wiphy_new(const struct cfg
+@@ -372,7 +374,9 @@ struct wiphy *wiphy_new(const struct cfg
rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
#endif
rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
-@@ -891,8 +895,10 @@ static int cfg80211_netdev_notifier_call
+@@ -919,8 +923,10 @@ static int cfg80211_netdev_notifier_call
wdev->identifier = ++rdev->wdev_id;
list_add_rcu(&wdev->list, &rdev->wdev_list);
rdev->devlist_generation++;
if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj,
"phy80211")) {
-@@ -1051,6 +1057,7 @@ static struct notifier_block cfg80211_ne
+@@ -1081,6 +1087,7 @@ static struct notifier_block cfg80211_ne
.notifier_call = cfg80211_netdev_notifier_call,
};
static void __net_exit cfg80211_pernet_exit(struct net *net)
{
struct cfg80211_registered_device *rdev;
-@@ -1068,14 +1075,17 @@ static void __net_exit cfg80211_pernet_e
+@@ -1098,14 +1105,17 @@ static void __net_exit cfg80211_pernet_e
static struct pernet_operations cfg80211_pernet_ops = {
.exit = cfg80211_pernet_exit,
};
err = wiphy_sysfs_init();
if (err)
-@@ -1110,8 +1120,10 @@ out_fail_nl80211:
+@@ -1142,8 +1152,10 @@ out_fail_nl80211:
out_fail_notifier:
wiphy_sysfs_exit();
out_fail_sysfs:
return err;
}
subsys_initcall(cfg80211_init);
-@@ -1123,7 +1135,9 @@ static void __exit cfg80211_exit(void)
+@@ -1155,7 +1167,9 @@ static void __exit cfg80211_exit(void)
unregister_netdevice_notifier(&cfg80211_netdev_notifier);
wiphy_sysfs_exit();
regulatory_exit();
u8 addr_mask[ETH_ALEN];
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
-@@ -282,6 +282,17 @@ struct wiphy *wiphy_new(const struct cfg
+@@ -316,6 +316,17 @@ struct wiphy *wiphy_new(const struct cfg
struct cfg80211_registered_device *rdev;
int alloc_size;
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
-@@ -4244,8 +4244,13 @@ redo:
+@@ -4241,8 +4241,13 @@ redo:
if (b43_bus_host_is_sdio(dev->dev)) {
b43_sdio_free_irq(dev);
} else {
}
mutex_lock(&wl->mutex);
dev = wl->current_dev;
-@@ -4291,9 +4296,17 @@ static int b43_wireless_core_start(struc
+@@ -4288,9 +4293,17 @@ static int b43_wireless_core_start(struc
goto out;
}
} else {
if (err) {
b43err(dev->wl, "Cannot request IRQ-%d\n",
dev->dev->irq);
-@@ -5116,6 +5129,10 @@ static int b43_setup_bands(struct b43_wl
+@@ -5113,6 +5126,10 @@ static int b43_setup_bands(struct b43_wl
static void b43_wireless_core_detach(struct b43_wldev *dev)
{
}
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -6054,11 +6054,22 @@ static void wlcore_nvs_cb(const struct f
+@@ -6054,13 +6054,24 @@ static void wlcore_nvs_cb(const struct f
wl->platform_quirks = pdata->platform_quirks;
wl->if_ops = pdev_data->if_ops;
irqflags, pdev->name, wl);
+#endif
if (ret < 0) {
-@@ -6135,7 +6145,11 @@ out_unreg:
+ wl1271_error("request_irq() failed: %d", ret);
+ goto out_free_nvs;
+@@ -6135,7 +6146,11 @@ out_unreg:
wl1271_unregister_hw(wl);
out_irq:
out_free_nvs:
kfree(wl->nvs);
-@@ -6181,7 +6195,12 @@ int wlcore_remove(struct platform_device
+@@ -6181,7 +6196,12 @@ int wlcore_remove(struct platform_device
disable_irq_wake(wl->irq);
}
wl1271_unregister_hw(wl);
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
-@@ -339,10 +339,6 @@ struct wiphy *wiphy_new(const struct cfg
+@@ -373,10 +373,6 @@ struct wiphy *wiphy_new(const struct cfg
INIT_WORK(&rdev->sched_scan_results_wk, __cfg80211_sched_scan_results);
INIT_DELAYED_WORK(&rdev->dfs_update_channels_wk,
cfg80211_dfs_channels_update_work);
device_initialize(&rdev->wiphy.dev);
rdev->wiphy.dev.class = &ieee80211_class;
rdev->wiphy.dev.platform_data = rdev;
-@@ -919,6 +915,15 @@ static int cfg80211_netdev_notifier_call
+@@ -947,6 +943,15 @@ static int cfg80211_netdev_notifier_call
wdev->sme_state = CFG80211_SME_IDLE;
mutex_unlock(&rdev->devlist_mtx);
#ifdef CONFIG_CFG80211_WEXT
static int __init
--- a/drivers/net/wireless/iwlegacy/common.c
+++ b/drivers/net/wireless/iwlegacy/common.c
-@@ -4936,8 +4936,17 @@ il_pci_resume(struct device *device)
+@@ -4935,8 +4935,17 @@ il_pci_resume(struct device *device)
return 0;
}
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -2031,6 +2031,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
+@@ -2035,6 +2035,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
goto fail_rcu;
}
if (unlikely(!multicast && skb->sk &&
skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS)) {
struct sk_buff *orig_skb = skb;
-@@ -2059,6 +2060,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
+@@ -2063,6 +2064,7 @@ netdev_tx_t ieee80211_subif_start_xmit(s
skb = orig_skb;
}
}
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
-@@ -811,9 +811,11 @@ void cfg80211_unregister_wdev(struct wir
+@@ -839,9 +839,11 @@ void cfg80211_unregister_wdev(struct wir
}
EXPORT_SYMBOL(cfg80211_unregister_wdev);
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -3305,7 +3305,12 @@ void ieee80211_rx(struct ieee80211_hw *h
+@@ -3317,7 +3317,12 @@ void ieee80211_rx(struct ieee80211_hw *h
drop:
kfree_skb(skb);
}
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1633,6 +1633,7 @@ void ieee80211_sdata_stop(struct ieee802
+@@ -1643,6 +1643,7 @@ void ieee80211_sdata_stop(struct ieee802
* Remove all interfaces, may only be called at hardware unregistration
* time because it doesn't do RCU-safe list removals.
*/
void ieee80211_remove_interfaces(struct ieee80211_local *local)
{
struct ieee80211_sub_if_data *sdata, *tmp;
-@@ -1660,6 +1661,22 @@ void ieee80211_remove_interfaces(struct
+@@ -1670,6 +1671,22 @@ void ieee80211_remove_interfaces(struct
kfree(sdata);
}
}
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -1508,6 +1508,10 @@ void ieee80211_xmit(struct ieee80211_sub
+@@ -1512,6 +1512,10 @@ void ieee80211_xmit(struct ieee80211_sub
}
}
static void rtl8187_configure_filter(struct ieee80211_hw *dev,
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
-@@ -2937,11 +2937,20 @@ struct wl1271_filter_params {
+@@ -2952,11 +2952,20 @@ struct wl1271_filter_params {
u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
};
fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
if (!fp) {
-@@ -2950,16 +2959,40 @@ static u64 wl1271_op_prepare_multicast(s
+@@ -2965,16 +2974,40 @@ static u64 wl1271_op_prepare_multicast(s
}
/* update multicast filtering parameters */
}
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -2601,7 +2601,11 @@ struct ieee80211_ops {
+@@ -2604,7 +2604,11 @@ struct ieee80211_ops {
void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
u64 (*prepare_multicast)(struct ieee80211_hw *hw,
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -912,7 +912,12 @@ struct ieee80211_local {
+@@ -907,7 +907,12 @@ struct ieee80211_local {
struct work_struct reconfig_filter;
/* aggregated multicast list */
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -742,8 +742,13 @@ static void ieee80211_do_stop(struct iee
+@@ -743,8 +743,13 @@ static void ieee80211_do_stop(struct iee
if (sdata->dev) {
netif_addr_lock_bh(sdata->dev);
spin_lock_bh(&local->filter_lock);
spin_unlock_bh(&local->filter_lock);
netif_addr_unlock_bh(sdata->dev);
-@@ -920,7 +925,12 @@ static void ieee80211_set_multicast_list
- sdata->flags ^= IEEE80211_SDATA_PROMISC;
- }
+@@ -930,7 +935,12 @@ static void ieee80211_set_multicast_list
+ drv_set_multicast_list(local, sdata, &dev->mc);
+
spin_lock_bh(&local->filter_lock);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
spin_unlock_bh(&local->filter_lock);
/* be a bit nasty */
-@@ -610,9 +614,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
+@@ -592,9 +596,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
wiphy->vht_capa_mod_mask = &mac80211_vht_capa_mod_mask;
INIT_LIST_HEAD(&local->interfaces);
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
-@@ -1170,6 +1170,10 @@ static void __exit ieee80211_exit(void)
+@@ -1152,6 +1152,10 @@ static void __exit ieee80211_exit(void)
rc80211_minstrel_ht_exit();
rc80211_minstrel_exit();
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -5656,7 +5656,9 @@ static int nl80211_dump_scan(struct sk_b
+@@ -5669,7 +5669,9 @@ static int nl80211_dump_scan(struct sk_b
spin_lock_bh(&rdev->bss_lock);
cfg80211_bss_expire(rdev);
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -1814,16 +1814,20 @@ out:
+@@ -1815,16 +1815,20 @@ out:
return wlcore_remove(pdev);
}
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
-@@ -3457,11 +3457,11 @@ static void b43_op_tx(struct ieee80211_h
+@@ -3454,11 +3454,11 @@ static void b43_op_tx(struct ieee80211_h
}
B43_WARN_ON(skb_shinfo(skb)->nr_frags);
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
-@@ -471,7 +471,9 @@ static struct usb_driver ath3k_driver =
+@@ -473,7 +473,9 @@ static struct usb_driver ath3k_driver =
.probe = ath3k_probe,
.disconnect = ath3k_disconnect,
.id_table = ath3k_table,
module_usb_driver(bpa10x_driver);
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
-@@ -1233,7 +1233,9 @@ static struct usb_driver btusb_driver =
+@@ -1234,7 +1234,9 @@ static struct usb_driver btusb_driver =
#endif
.id_table = btusb_table,
.supports_autosuspend = 1,
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -7715,7 +7715,7 @@ static int nl80211_parse_wowlan_tcp(stru
+@@ -7728,7 +7728,7 @@ static int nl80211_parse_wowlan_tcp(stru
port = nla_get_u16(tb[NL80211_WOWLAN_TCP_SRC_PORT]);
else
port = 0;