if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
+@@ -173,7 +173,7 @@ struct ieee80211_chanctx_conf {
+
+ u8 rx_chains_static, rx_chains_dynamic;
+
+- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
++ u8 drv_priv[0] __aligned(sizeof(void *));
+ };
+
+ /**
+@@ -1059,7 +1059,7 @@ struct ieee80211_vif {
+ u32 driver_flags;
+
+ /* must be last */
+- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
++ u8 drv_priv[0] __aligned(sizeof(void *));
+ };
+
+ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
+@@ -1209,7 +1209,7 @@ struct ieee80211_sta {
+ u8 max_sp;
+
+ /* must be last */
+- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
++ u8 drv_priv[0] __aligned(sizeof(void *));
+ };
+
+ /**
@@ -1369,6 +1369,10 @@ struct ieee80211_tx_control {
* @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
* P2P Interface. This will be honoured even if more than one interface
ieee80211_bss_info_change_notify(sdata, bss_change);
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -510,7 +510,6 @@ int ieee80211_do_open(struct wireless_de
+@@ -508,9 +508,9 @@ static void ieee80211_del_virtual_monito
+ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+ {
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
++ struct ieee80211_sub_if_data *ap_sdata;
struct net_device *dev = wdev->netdev;
struct ieee80211_local *local = sdata->local;
- struct sta_info *sta;
u32 changed = 0;
int res;
u32 hw_reconf_flags = 0;
-@@ -665,30 +664,8 @@ int ieee80211_do_open(struct wireless_de
+@@ -587,10 +587,14 @@ int ieee80211_do_open(struct wireless_de
+ switch (sdata->vif.type) {
+ case NL80211_IFTYPE_AP_VLAN:
+ /* no need to tell driver, but set carrier */
+- if (rtnl_dereference(sdata->bss->beacon))
+- netif_carrier_on(dev);
+- else
++ if (!rtnl_dereference(sdata->bss->beacon)) {
+ netif_carrier_off(dev);
++ break;
++ }
++
++ ap_sdata = get_bss_sdata(sdata);
++ ieee80211_vif_copy_channel(sdata, ap_sdata);
++ netif_carrier_on(dev);
+ break;
+ case NL80211_IFTYPE_MONITOR:
+ if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
+@@ -665,30 +669,8 @@ int ieee80211_do_open(struct wireless_de
set_bit(SDATA_STATE_RUNNING, &sdata->state);
/*
* set_multicast_list will be invoked by the networking core
-@@ -1072,6 +1049,72 @@ static void ieee80211_if_setup(struct ne
+@@ -844,6 +826,8 @@ static void ieee80211_do_stop(struct iee
+ switch (sdata->vif.type) {
+ case NL80211_IFTYPE_AP_VLAN:
+ list_del(&sdata->u.vlan.list);
++ netif_carrier_off(sdata->dev);
++ ieee80211_vif_release_channel(sdata);
+ /* no need to tell driver */
+ break;
+ case NL80211_IFTYPE_MONITOR:
+@@ -1072,6 +1056,72 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev;
}
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
-@@ -1176,6 +1219,9 @@ static void ieee80211_iface_work(struct
+@@ -1176,6 +1226,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;
ieee80211_rx(ar->hw, skb);
return 0;
}
+--- a/drivers/net/wireless/ath/ath9k/calib.c
++++ b/drivers/net/wireless/ath/ath9k/calib.c
+@@ -69,6 +69,7 @@ s16 ath9k_hw_getchan_noise(struct ath_hw
+
+ if (chan && chan->noisefloor) {
+ s8 delta = chan->noisefloor -
++ ATH9K_NF_CAL_NOISE_THRESH -
+ ath9k_hw_get_default_nf(ah, chan);
+ if (delta > 0)
+ noise += delta;
+--- a/drivers/net/wireless/ath/ath9k/calib.h
++++ b/drivers/net/wireless/ath/ath9k/calib.h
+@@ -21,6 +21,9 @@
+
+ #define AR_PHY_CCA_FILTERWINDOW_LENGTH 5
+
++/* Internal noise floor can vary by about 6db depending on the frequency */
++#define ATH9K_NF_CAL_NOISE_THRESH 6
++
+ #define NUM_NF_READINGS 6
+ #define ATH9K_NF_CAL_HIST_MAX 5
+
+--- a/drivers/net/wireless/ath/ath5k/base.c
++++ b/drivers/net/wireless/ath/ath5k/base.c
+@@ -851,7 +851,7 @@ ath5k_txbuf_free_skb(struct ath5k_hw *ah
+ return;
+ dma_unmap_single(ah->dev, bf->skbaddr, bf->skb->len,
+ DMA_TO_DEVICE);
+- dev_kfree_skb_any(bf->skb);
++ ieee80211_free_txskb(ah->hw, bf->skb);
+ bf->skb = NULL;
+ bf->skbaddr = 0;
+ bf->desc->ds_data = 0;
+@@ -1578,7 +1578,7 @@ ath5k_tx_queue(struct ieee80211_hw *hw,
+ return;
+
+ drop_packet:
+- dev_kfree_skb_any(skb);
++ ieee80211_free_txskb(hw, skb);
+ }
+
+ static void
+--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
++++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
+@@ -65,7 +65,7 @@ ath5k_tx(struct ieee80211_hw *hw, struct
+ u16 qnum = skb_get_queue_mapping(skb);
+
+ if (WARN_ON(qnum >= ah->ah_capabilities.cap_queues.q_tx_num)) {
+- dev_kfree_skb_any(skb);
++ ieee80211_free_txskb(hw, skb);
+ return;
+ }
+
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -409,7 +409,10 @@ static inline
+ struct b43_dmadesc_meta *meta)
+ {
+ if (meta->skb) {
+- dev_kfree_skb_any(meta->skb);
++ if (ring->tx)
++ ieee80211_free_txskb(ring->dev->wl->hw, meta->skb);
++ else
++ dev_kfree_skb_any(meta->skb);
+ meta->skb = NULL;
+ }
+ }
+@@ -1454,7 +1457,7 @@ int b43_dma_tx(struct b43_wldev *dev, st
+ if (unlikely(err == -ENOKEY)) {
+ /* Drop this packet, as we don't have the encryption key
+ * anymore and must not transmit it unencrypted. */
+- dev_kfree_skb_any(skb);
++ ieee80211_free_txskb(dev->wl->hw, skb);
+ err = 0;
+ goto out;
+ }
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -3397,7 +3397,7 @@ static void b43_tx_work(struct work_stru
+ break;
+ }
+ if (unlikely(err))
+- dev_kfree_skb(skb); /* Drop it */
++ ieee80211_free_txskb(wl->hw, skb);
+ err = 0;
+ }
+
+@@ -3419,7 +3419,7 @@ static void b43_op_tx(struct ieee80211_h
+
+ if (unlikely(skb->len < 2 + 2 + 6)) {
+ /* Too short, this can't be a valid frame. */
+- dev_kfree_skb_any(skb);
++ ieee80211_free_txskb(hw, skb);
+ return;
+ }
+ B43_WARN_ON(skb_shinfo(skb)->nr_frags);
+@@ -4234,8 +4234,12 @@ redo:
+
+ /* Drain all TX queues. */
+ for (queue_num = 0; queue_num < B43_QOS_QUEUE_NUM; queue_num++) {
+- while (skb_queue_len(&wl->tx_queue[queue_num]))
+- dev_kfree_skb(skb_dequeue(&wl->tx_queue[queue_num]));
++ while (skb_queue_len(&wl->tx_queue[queue_num])) {
++ struct sk_buff *skb;
++
++ skb = skb_dequeue(&wl->tx_queue[queue_num]);
++ ieee80211_free_txskb(wl->hw, skb);
++ }
+ }
+
+ b43_mac_suspend(dev);
+--- a/drivers/net/wireless/b43/pio.c
++++ b/drivers/net/wireless/b43/pio.c
+@@ -196,7 +196,7 @@ static void b43_pio_cancel_tx_packets(st
+ for (i = 0; i < ARRAY_SIZE(q->packets); i++) {
+ pack = &(q->packets[i]);
+ if (pack->skb) {
+- dev_kfree_skb_any(pack->skb);
++ ieee80211_free_txskb(q->dev->wl->hw, pack->skb);
+ pack->skb = NULL;
+ }
+ }
+@@ -552,7 +552,7 @@ int b43_pio_tx(struct b43_wldev *dev, st
+ if (unlikely(err == -ENOKEY)) {
+ /* Drop this packet, as we don't have the encryption key
+ * anymore and must not transmit it unencrypted. */
+- dev_kfree_skb_any(skb);
++ ieee80211_free_txskb(dev->wl->hw, skb);
+ err = 0;
+ goto out;
+ }
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -915,6 +915,12 @@ static int ieee80211_start_ap(struct wip
+ if (err)
+ return err;
+
++ list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
++ err = ieee80211_vif_copy_channel(vlan, sdata);
++ if (err)
++ return err;
++ }
++
+ /*
+ * Apply control port protocol, this allows us to
+ * not encrypt dynamic WEP control frames.
+@@ -998,8 +1004,11 @@ static int ieee80211_stop_ap(struct wiph
+ old_probe_resp = rtnl_dereference(sdata->u.ap.probe_resp);
+
+ /* turn off carrier for this interface and dependent VLANs */
+- list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
++ list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
++ sta_info_flush(local, vlan);
+ netif_carrier_off(vlan->dev);
++ ieee80211_vif_release_channel(vlan);
++ }
+ netif_carrier_off(dev);
+
+ /* remove beacon and probe response */
+--- a/net/mac80211/chan.c
++++ b/net/mac80211/chan.c
+@@ -119,14 +119,17 @@ static int ieee80211_assign_vif_chanctx(
+
+ lockdep_assert_held(&local->chanctx_mtx);
+
+- ret = drv_assign_vif_chanctx(local, sdata, ctx);
+- if (ret)
+- return ret;
++ if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN) {
++ ret = drv_assign_vif_chanctx(local, sdata, ctx);
++ if (ret)
++ return ret;
++ }
+
+ rcu_assign_pointer(sdata->vif.chanctx_conf, &ctx->conf);
+ ctx->refcount++;
+
+- ieee80211_recalc_txpower(sdata);
++ if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
++ ieee80211_recalc_txpower(sdata);
+
+ return 0;
+ }
+@@ -174,7 +177,8 @@ static void ieee80211_unassign_vif_chanc
+ ctx->refcount--;
+ rcu_assign_pointer(sdata->vif.chanctx_conf, NULL);
+
+- drv_unassign_vif_chanctx(local, sdata, ctx);
++ if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
++ drv_unassign_vif_chanctx(local, sdata, ctx);
+
+ if (ctx->refcount > 0) {
+ ieee80211_recalc_chanctx_chantype(sdata->local, ctx);
+@@ -285,6 +289,30 @@ void ieee80211_recalc_smps_chanctx(struc
+ drv_change_chanctx(local, chanctx, IEEE80211_CHANCTX_CHANGE_RX_CHAINS);
+ }
+
++int ieee80211_vif_copy_channel(struct ieee80211_sub_if_data *sdata,
++ struct ieee80211_sub_if_data *parent)
++{
++ struct ieee80211_local *local = sdata->local;
++ struct ieee80211_chanctx_conf *conf;
++ struct ieee80211_chanctx *ctx;
++
++ int ret;
++
++ mutex_lock(&local->chanctx_mtx);
++ conf = rcu_dereference_protected(parent->vif.chanctx_conf,
++ lockdep_is_held(&local->chanctx_mtx));
++ if (!conf) {
++ ret = -ENOENT;
++ goto out;
++ }
++
++ ctx = container_of(conf, struct ieee80211_chanctx, conf);
++ ret = ieee80211_assign_vif_chanctx(sdata, ctx);
++out:
++ mutex_unlock(&local->chanctx_mtx);
++ return ret;
++}
++
+ int ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
+ const struct cfg80211_chan_def *chandef,
+ enum ieee80211_chanctx_mode mode)
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -1633,6 +1633,8 @@ ieee80211_vif_use_channel(struct ieee802
+ const struct cfg80211_chan_def *chandef,
+ enum ieee80211_chanctx_mode mode);
+ void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
++int ieee80211_vif_copy_channel(struct ieee80211_sub_if_data *sdata,
++ struct ieee80211_sub_if_data *parent);
+
+ void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
+ struct ieee80211_chanctx *chanctx);
+--- a/include/linux/ieee80211.h
++++ b/include/linux/ieee80211.h
+@@ -180,7 +180,7 @@ struct ieee80211_hdr {
+ u8 addr3[6];
+ __le16 seq_ctrl;
+ u8 addr4[6];
+-} __attribute__ ((packed));
++} __packed;
+
+ struct ieee80211_hdr_3addr {
+ __le16 frame_control;
+@@ -189,7 +189,7 @@ struct ieee80211_hdr_3addr {
+ u8 addr2[6];
+ u8 addr3[6];
+ __le16 seq_ctrl;
+-} __attribute__ ((packed));
++} __packed;
+
+ struct ieee80211_qos_hdr {
+ __le16 frame_control;
+@@ -199,7 +199,7 @@ struct ieee80211_qos_hdr {
+ u8 addr3[6];
+ __le16 seq_ctrl;
+ __le16 qos_ctrl;
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set
+@@ -576,7 +576,7 @@ struct ieee80211s_hdr {
+ __le32 seqnum;
+ u8 eaddr1[6];
+ u8 eaddr2[6];
+-} __attribute__ ((packed));
++} __packed;
+
+ /* Mesh flags */
+ #define MESH_FLAGS_AE_A4 0x1
+@@ -614,7 +614,7 @@ struct ieee80211_quiet_ie {
+ u8 period;
+ __le16 duration;
+ __le16 offset;
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * struct ieee80211_msrment_ie
+@@ -626,7 +626,7 @@ struct ieee80211_msrment_ie {
+ u8 mode;
+ u8 type;
+ u8 request[0];
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * struct ieee80211_channel_sw_ie
+@@ -637,7 +637,7 @@ struct ieee80211_channel_sw_ie {
+ u8 mode;
+ u8 new_ch_num;
+ u8 count;
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * struct ieee80211_tim
+@@ -650,7 +650,7 @@ struct ieee80211_tim_ie {
+ u8 bitmap_ctrl;
+ /* variable size: 1 - 251 bytes */
+ u8 virtual_map[1];
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * struct ieee80211_meshconf_ie
+@@ -665,7 +665,7 @@ struct ieee80211_meshconf_ie {
+ u8 meshconf_auth;
+ u8 meshconf_form;
+ u8 meshconf_cap;
+-} __attribute__ ((packed));
++} __packed;
+
+ /**
+ * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags
+@@ -695,7 +695,7 @@ struct ieee80211_rann_ie {
+ __le32 rann_seq;
+ __le32 rann_interval;
+ __le32 rann_metric;
+-} __attribute__ ((packed));
++} __packed;
+
+ enum ieee80211_rann_flags {
+ RANN_FLAG_IS_GATE = 1 << 0,
+@@ -717,33 +717,33 @@ struct ieee80211_mgmt {
+ __le16 status_code;
+ /* possibly followed by Challenge text */
+ u8 variable[0];
+- } __attribute__ ((packed)) auth;
++ } __packed auth;
+ struct {
+ __le16 reason_code;
+- } __attribute__ ((packed)) deauth;
++ } __packed deauth;
+ struct {
+ __le16 capab_info;
+ __le16 listen_interval;
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+- } __attribute__ ((packed)) assoc_req;
++ } __packed assoc_req;
+ struct {
+ __le16 capab_info;
+ __le16 status_code;
+ __le16 aid;
+ /* followed by Supported rates */
+ u8 variable[0];
+- } __attribute__ ((packed)) assoc_resp, reassoc_resp;
++ } __packed assoc_resp, reassoc_resp;
+ struct {
+ __le16 capab_info;
+ __le16 listen_interval;
+ u8 current_ap[6];
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+- } __attribute__ ((packed)) reassoc_req;
++ } __packed reassoc_req;
+ struct {
+ __le16 reason_code;
+- } __attribute__ ((packed)) disassoc;
++ } __packed disassoc;
+ struct {
+ __le64 timestamp;
+ __le16 beacon_int;
+@@ -751,11 +751,11 @@ struct ieee80211_mgmt {
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params, TIM */
+ u8 variable[0];
+- } __attribute__ ((packed)) beacon;
++ } __packed beacon;
+ struct {
+ /* only variable items: SSID, Supported rates */
+ u8 variable[0];
+- } __attribute__ ((packed)) probe_req;
++ } __packed probe_req;
+ struct {
+ __le64 timestamp;
+ __le16 beacon_int;
+@@ -763,7 +763,7 @@ struct ieee80211_mgmt {
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params */
+ u8 variable[0];
+- } __attribute__ ((packed)) probe_resp;
++ } __packed probe_resp;
+ struct {
+ u8 category;
+ union {
+@@ -772,55 +772,55 @@ struct ieee80211_mgmt {
+ u8 dialog_token;
+ u8 status_code;
+ u8 variable[0];
+- } __attribute__ ((packed)) wme_action;
++ } __packed wme_action;
+ struct{
+ u8 action_code;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_channel_sw_ie sw_elem;
+- } __attribute__((packed)) chan_switch;
++ } __packed chan_switch;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_msrment_ie msr_elem;
+- } __attribute__((packed)) measurement;
++ } __packed measurement;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ __le16 capab;
+ __le16 timeout;
+ __le16 start_seq_num;
+- } __attribute__((packed)) addba_req;
++ } __packed addba_req;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ __le16 status;
+ __le16 capab;
+ __le16 timeout;
+- } __attribute__((packed)) addba_resp;
++ } __packed addba_resp;
+ struct{
+ u8 action_code;
+ __le16 params;
+ __le16 reason_code;
+- } __attribute__((packed)) delba;
++ } __packed delba;
+ struct {
+ u8 action_code;
+ u8 variable[0];
+- } __attribute__((packed)) self_prot;
++ } __packed self_prot;
+ struct{
+ u8 action_code;
+ u8 variable[0];
+- } __attribute__((packed)) mesh_action;
++ } __packed mesh_action;
+ struct {
+ u8 action;
+ u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
+- } __attribute__ ((packed)) sa_query;
++ } __packed sa_query;
+ struct {
+ u8 action;
+ u8 smps_control;
+- } __attribute__ ((packed)) ht_smps;
++ } __packed ht_smps;
+ struct {
+ u8 action_code;
+ u8 dialog_token;
+@@ -828,9 +828,9 @@ struct ieee80211_mgmt {
+ u8 variable[0];
+ } __packed tdls_discover_resp;
+ } u;
+- } __attribute__ ((packed)) action;
++ } __packed action;
+ } u;
+-} __attribute__ ((packed));
++} __packed;
+
+ /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
+ #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
+@@ -846,7 +846,7 @@ struct ieee80211_mmie {
+ __le16 key_id;
+ u8 sequence_number[6];
+ u8 mic[8];
+-} __attribute__ ((packed));
++} __packed;
+
+ struct ieee80211_vendor_ie {
+ u8 element_id;
+@@ -861,20 +861,20 @@ struct ieee80211_rts {
+ __le16 duration;
+ u8 ra[6];
+ u8 ta[6];
+-} __attribute__ ((packed));
++} __packed;
+
+ struct ieee80211_cts {
+ __le16 frame_control;
+ __le16 duration;
+ u8 ra[6];
+-} __attribute__ ((packed));
++} __packed;
+
+ struct ieee80211_pspoll {
+ __le16 frame_control;
+ __le16 aid;
+ u8 bssid[6];
+ u8 ta[6];
+-} __attribute__ ((packed));
++} __packed;
+
+ /* TDLS */
+
+@@ -967,7 +967,7 @@ struct ieee80211_bar {
+ __u8 ta[6];
+ __le16 control;
+ __le16 start_seq_num;
+-} __attribute__((packed));
++} __packed;
+
+ /* 802.11 BAR control masks */
+ #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000
+@@ -992,7 +992,7 @@ struct ieee80211_mcs_info {
+ __le16 rx_highest;
+ u8 tx_params;
+ u8 reserved[3];
+-} __attribute__((packed));
++} __packed;
+
+ /* 802.11n HT capability MSC set */
+ #define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff
+@@ -1031,7 +1031,7 @@ struct ieee80211_ht_cap {
+ __le16 extended_ht_cap_info;
+ __le32 tx_BF_cap_info;
+ u8 antenna_selection_info;
+-} __attribute__ ((packed));
++} __packed;
+
+ /* 802.11n HT capabilities masks (for cap_info) */
+ #define IEEE80211_HT_CAP_LDPC_CODING 0x0001
+@@ -1102,7 +1102,7 @@ struct ieee80211_ht_operation {
+ __le16 operation_mode;
+ __le16 stbc_param;
+ u8 basic_set[16];
+-} __attribute__ ((packed));
++} __packed;
+
+ /* for ht_param */
+ #define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03
+@@ -1832,14 +1832,14 @@ struct ieee80211_country_ie_triplet {
+ u8 first_channel;
+ u8 num_channels;
+ s8 max_power;
+- } __attribute__ ((packed)) chans;
++ } __packed chans;
+ struct {
+ u8 reg_extension_id;
+ u8 reg_class;
+ u8 coverage_class;
+- } __attribute__ ((packed)) ext;
++ } __packed ext;
+ };
+-} __attribute__ ((packed));
++} __packed;
+
+ enum ieee80211_timeout_interval_type {
+ WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */,
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -1256,7 +1256,7 @@ struct cfg80211_bss {
+
+ u8 bssid[ETH_ALEN];
+
+- u8 priv[0] __attribute__((__aligned__(sizeof(void *))));
++ u8 priv[0] __aligned(sizeof(void *));
+ };
+
+ /**
+@@ -2395,7 +2395,7 @@ struct wiphy {
+ const struct iw_handler_def *wext;
+ #endif
+
+- char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
++ char priv[0] __aligned(NETDEV_ALIGN);
+ };
+
+ static inline struct net *wiphy_net(struct wiphy *wiphy)
+--- a/net/wireless/core.h
++++ b/net/wireless/core.h
+@@ -86,7 +86,7 @@ struct cfg80211_registered_device {
+
+ /* must be last because of the way we do wiphy_priv(),
+ * and it should at least be aligned to NETDEV_ALIGN */
+- struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN)));
++ struct wiphy wiphy __aligned(NETDEV_ALIGN);
+ };
+
+ static inline