From 9a4921d6d4ac7a0968e520c4f325b7ff68525264 Mon Sep 17 00:00:00 2001 From: nbd Date: Fri, 3 Apr 2015 19:42:33 +0000 Subject: [PATCH] mac80211: update the software queue patch to the version accepted upstream Signed-off-by: Felix Fietkau git-svn-id: svn://svn.openwrt.org/openwrt/trunk@45265 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...d-an-intermediate-software-queue-implemen.patch | 102 ++++++++++++--------- ...n-t-look-up-stations-for-multicast-addres.patch | 2 +- ...1-don-t-look-up-destination-station-twice.patch | 10 +- ...op-4-addr-VLAN-frames-earlier-if-not-conn.patch | 2 +- ...80211-mesh-avoid-pointless-station-lookup.patch | 2 +- ...11-avoid-duplicate-TX-path-station-lookup.patch | 38 ++++---- .../522-mac80211_configure_antenna_gain.patch | 4 +- 7 files changed, 86 insertions(+), 74 deletions(-) diff --git a/package/kernel/mac80211/patches/300-mac80211-add-an-intermediate-software-queue-implemen.patch b/package/kernel/mac80211/patches/300-mac80211-add-an-intermediate-software-queue-implemen.patch index 009c8d58c8..d8ea82269b 100644 --- a/package/kernel/mac80211/patches/300-mac80211-add-an-intermediate-software-queue-implemen.patch +++ b/package/kernel/mac80211/patches/300-mac80211-add-an-intermediate-software-queue-implemen.patch @@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -84,6 +84,35 @@ +@@ -84,6 +84,39 @@ * */ @@ -33,13 +33,16 @@ Signed-off-by: Felix Fietkau + * of letting mac80211 push them via drv_tx(). + * Other frames (e.g. control or management) are still pushed using drv_tx(). + * ++ * Drivers indicate that they use this model by implementing the .wake_tx_queue ++ * driver operation. ++ * + * Intermediate queues (struct ieee80211_txq) are kept per-sta per-tid, with a + * single per-vif queue for multicast data frames. + * + * The driver is expected to initialize its private per-queue data for stations + * and interfaces in the .add_interface and .sta_add ops. + * -+ * The driver can not access the queue directly. To dequeue a frame, it calls ++ * The driver can't access the queue directly. To dequeue a frame, it calls + * ieee80211_tx_dequeue(). Whenever mac80211 adds a new frame to a queue, it + * calls the .wake_tx_queue driver op. + * @@ -48,14 +51,23 @@ Signed-off-by: Felix Fietkau + * ieee80211_sta_set_buffered(). For frames buffered in the ieee80211_txq + * struct, mac80211 sets the appropriate TIM PVB bits and calls + * .release_buffered_frames(). -+ * That callback is expected to release its own buffered frames and afterwards -+ * also frames from the ieee80211_txq (obtained via ieee80211_tx_dequeue). ++ * In that callback the driver is therefore expected to release its own ++ * buffered frames and afterwards also frames from the ieee80211_txq (obtained ++ * via the usual ieee80211_tx_dequeue). + */ + struct device; /** -@@ -1257,6 +1286,8 @@ struct ieee80211_vif { +@@ -1246,6 +1279,7 @@ enum ieee80211_vif_flags { + * monitor interface (if that is requested.) + * @drv_priv: data area for driver use, will always be aligned to + * sizeof(void *). ++ * @txq: the multicast data TX queue (if driver uses the TXQ abstraction) + */ + struct ieee80211_vif { + enum nl80211_iftype type; +@@ -1257,6 +1291,8 @@ struct ieee80211_vif { u8 cab_queue; u8 hw_queue[IEEE80211_NUM_ACS]; @@ -64,7 +76,15 @@ Signed-off-by: Felix Fietkau struct ieee80211_chanctx_conf __rcu *chanctx_conf; u32 driver_flags; -@@ -1519,6 +1550,8 @@ struct ieee80211_sta { +@@ -1501,6 +1537,7 @@ struct ieee80211_sta_rates { + * @tdls_initiator: indicates the STA is an initiator of the TDLS link. Only + * valid if the STA is a TDLS peer in the first place. + * @mfp: indicates whether the STA uses management frame protection or not. ++ * @txq: per-TID data TX queues (if driver uses the TXQ abstraction) + */ + struct ieee80211_sta { + u32 supp_rates[IEEE80211_NUM_BANDS]; +@@ -1519,6 +1556,8 @@ struct ieee80211_sta { bool tdls_initiator; bool mfp; @@ -73,7 +93,7 @@ Signed-off-by: Felix Fietkau /* must be last */ u8 drv_priv[0] __aligned(sizeof(void *)); }; -@@ -1547,6 +1580,27 @@ struct ieee80211_tx_control { +@@ -1547,6 +1586,27 @@ struct ieee80211_tx_control { }; /** @@ -101,7 +121,7 @@ Signed-off-by: Felix Fietkau * enum ieee80211_hw_flags - hardware flags * * These flags are used to indicate hardware capabilities to -@@ -1770,6 +1824,8 @@ enum ieee80211_hw_flags { +@@ -1770,6 +1830,8 @@ enum ieee80211_hw_flags { * within &struct ieee80211_sta. * @chanctx_data_size: size (in bytes) of the drv_priv data area * within &struct ieee80211_chanctx_conf. @@ -110,7 +130,7 @@ Signed-off-by: Felix Fietkau * * @max_rates: maximum number of alternate rate retry stages the hw * can handle. -@@ -1818,6 +1874,9 @@ enum ieee80211_hw_flags { +@@ -1818,6 +1880,9 @@ enum ieee80211_hw_flags { * @n_cipher_schemes: a size of an array of cipher schemes definitions. * @cipher_schemes: a pointer to an array of cipher scheme definitions * supported by HW. @@ -120,7 +140,7 @@ Signed-off-by: Felix Fietkau */ struct ieee80211_hw { struct ieee80211_conf conf; -@@ -1830,6 +1889,7 @@ struct ieee80211_hw { +@@ -1830,6 +1895,7 @@ struct ieee80211_hw { int vif_data_size; int sta_data_size; int chanctx_data_size; @@ -128,7 +148,7 @@ Signed-off-by: Felix Fietkau u16 queues; u16 max_listen_interval; s8 max_signal; -@@ -1846,6 +1906,7 @@ struct ieee80211_hw { +@@ -1846,6 +1912,7 @@ struct ieee80211_hw { u8 uapsd_max_sp_len; u8 n_cipher_schemes; const struct ieee80211_cipher_scheme *cipher_schemes; @@ -136,7 +156,7 @@ Signed-off-by: Felix Fietkau }; /** -@@ -3007,6 +3068,8 @@ enum ieee80211_reconfig_type { +@@ -3007,6 +3074,8 @@ enum ieee80211_reconfig_type { * response template is provided, together with the location of the * switch-timing IE within the template. The skb can only be used within * the function call. @@ -145,7 +165,7 @@ Signed-off-by: Felix Fietkau */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -3238,6 +3301,9 @@ struct ieee80211_ops { +@@ -3238,6 +3307,9 @@ struct ieee80211_ops { void (*tdls_recv_channel_switch)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_tdls_ch_sw_params *params); @@ -155,7 +175,7 @@ Signed-off-by: Felix Fietkau }; /** -@@ -5249,4 +5315,17 @@ void ieee80211_unreserve_tid(struct ieee +@@ -5249,4 +5321,15 @@ void ieee80211_unreserve_tid(struct ieee */ size_t ieee80211_ie_split(const u8 *ies, size_t ielen, const u8 *ids, int n_ids, size_t offset); @@ -164,14 +184,12 @@ Signed-off-by: Felix Fietkau + * ieee80211_tx_dequeue - dequeue a packet from a software tx queue + * + * @hw: pointer as obtained from ieee80211_alloc_hw() -+ * @txq: pointer obtained from .add_tx_queue() call ++ * @txq: pointer obtained from station or virtual interface + * + * Returns the skb if successful, %NULL if no frame was available. + */ +struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw, + struct ieee80211_txq *txq); -+ -+ #endif /* MAC80211_H */ --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -187,7 +205,7 @@ Signed-off-by: Felix Fietkau + if (!check_sdata_in_driver(sdata)) + return; + -+ trace_drv_wake_tx_queue(local, sdata, txq->txq.sta, txq->txq.tid); ++ trace_drv_wake_tx_queue(local, sdata, txq); + local->ops->wake_tx_queue(&local->hw, &txq->txq); +} + @@ -446,15 +464,6 @@ Signed-off-by: Felix Fietkau skb_queue_head_init(&pending); /* sync with ieee80211_tx_h_unicast_ps_buf */ -@@ -1254,7 +1302,7 @@ ieee80211_sta_ps_deliver_response(struct - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - bool more_data = false; -- int ac; -+ int ac, tid; - unsigned long driver_release_tids = 0; - struct sk_buff_head frames; - @@ -1275,8 +1323,10 @@ ieee80211_sta_ps_deliver_response(struct /* if we already have frames from software, then we can't also * release from hardware queues @@ -467,16 +476,17 @@ Signed-off-by: Felix Fietkau if (driver_release_tids) { /* If the driver has data on more than one TID then -@@ -1447,6 +1497,8 @@ ieee80211_sta_ps_deliver_response(struct +@@ -1447,6 +1497,9 @@ ieee80211_sta_ps_deliver_response(struct sta_info_recalc_tim(sta); } else { + unsigned long tids = sta->txq_buffered_tids & driver_release_tids; ++ int tid; + /* * We need to release a frame that is buffered somewhere in the * driver ... it'll have to handle that. -@@ -1466,8 +1518,22 @@ ieee80211_sta_ps_deliver_response(struct +@@ -1466,8 +1519,22 @@ ieee80211_sta_ps_deliver_response(struct * that the TID(s) became empty before returning here from the * release function. * Either way, however, when the driver tells us that the TID(s) @@ -520,35 +530,38 @@ Signed-off-by: Felix Fietkau unsigned long rx_packets; --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h -@@ -2312,6 +2312,34 @@ TRACE_EVENT(drv_tdls_recv_channel_switch +@@ -2312,6 +2312,37 @@ TRACE_EVENT(drv_tdls_recv_channel_switch ) ); +TRACE_EVENT(drv_wake_tx_queue, + TP_PROTO(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, -+ struct ieee80211_sta *sta, -+ u8 tid), ++ struct txq_info *txq), + -+ TP_ARGS(local, sdata, sta, tid), ++ TP_ARGS(local, sdata, txq), + + TP_STRUCT__entry( + LOCAL_ENTRY + VIF_ENTRY + STA_ENTRY ++ __field(u8, ac) + __field(u8, tid) + ), + + TP_fast_assign( ++ struct ieee80211_sta *sta = txq->txq.sta; ++ + LOCAL_ASSIGN; + VIF_ASSIGN; + STA_ASSIGN; -+ __entry->tid = tid; ++ __entry->ac = txq->txq.ac; ++ __entry->tid = txq->txq.tid; + ), + + TP_printk( -+ LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " tid: 0x%x", -+ LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->tid ++ LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " ac:%d tid:%d", ++ LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid + ) +); + @@ -557,15 +570,14 @@ Signed-off-by: Felix Fietkau #define TRACE_SYSTEM mac80211_msg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -776,12 +776,23 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 +@@ -776,12 +776,22 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 return TX_CONTINUE; } -+static u16 -+ieee80211_tx_next_seq(struct sta_info *sta, int tid) ++static __le16 ieee80211_tx_next_seq(struct sta_info *sta, int tid) +{ + u16 *seq = &sta->tid_seq[tid]; -+ u16 ret = cpu_to_le16(*seq); ++ __le16 ret = cpu_to_le16(*seq); + + /* Increase the sequence number. */ + *seq = (*seq + 0x10) & IEEE80211_SCTL_SEQ; @@ -582,7 +594,7 @@ Signed-off-by: Felix Fietkau u8 *qc; int tid; -@@ -832,13 +843,10 @@ ieee80211_tx_h_sequence(struct ieee80211 +@@ -832,13 +842,10 @@ ieee80211_tx_h_sequence(struct ieee80211 qc = ieee80211_get_qos_ctl(hdr); tid = *qc & IEEE80211_QOS_CTL_TID_MASK; @@ -598,7 +610,7 @@ Signed-off-by: Felix Fietkau return TX_CONTINUE; } -@@ -1067,7 +1075,7 @@ static bool ieee80211_tx_prep_agg(struct +@@ -1067,7 +1074,7 @@ static bool ieee80211_tx_prep_agg(struct * nothing -- this aggregation session is being started * but that might still fail with the driver */ @@ -607,7 +619,7 @@ Signed-off-by: Felix Fietkau spin_lock(&tx->sta->lock); /* * Need to re-check now, because we may get here -@@ -1201,13 +1209,102 @@ ieee80211_tx_prepare(struct ieee80211_su +@@ -1201,13 +1208,102 @@ ieee80211_tx_prepare(struct ieee80211_su return TX_CONTINUE; } @@ -620,7 +632,7 @@ Signed-off-by: Felix Fietkau + struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct ieee80211_tx_control control = { -+ .sta = pubsta ++ .sta = pubsta, + }; + struct ieee80211_txq *txq = NULL; + struct txq_info *txqi; @@ -711,7 +723,7 @@ Signed-off-by: Felix Fietkau struct sk_buff *skb, *tmp; unsigned long flags; -@@ -1265,10 +1362,9 @@ static bool ieee80211_tx_frags(struct ie +@@ -1265,10 +1361,9 @@ static bool ieee80211_tx_frags(struct ie spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); info->control.vif = vif; diff --git a/package/kernel/mac80211/patches/310-mac80211-don-t-look-up-stations-for-multicast-addres.patch b/package/kernel/mac80211/patches/310-mac80211-don-t-look-up-stations-for-multicast-addres.patch index 7a039d627a..bd3050e3c2 100644 --- a/package/kernel/mac80211/patches/310-mac80211-don-t-look-up-stations-for-multicast-addres.patch +++ b/package/kernel/mac80211/patches/310-mac80211-don-t-look-up-stations-for-multicast-addres.patch @@ -10,7 +10,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1162,7 +1162,7 @@ ieee80211_tx_prepare(struct ieee80211_su +@@ -1161,7 +1161,7 @@ ieee80211_tx_prepare(struct ieee80211_su tx->sdata->control_port_protocol == tx->skb->protocol) { tx->sta = sta_info_get_bss(sdata, hdr->addr1); } diff --git a/package/kernel/mac80211/patches/312-mac80211-don-t-look-up-destination-station-twice.patch b/package/kernel/mac80211/patches/312-mac80211-don-t-look-up-destination-station-twice.patch index 6109bc2e87..02a7fab436 100644 --- a/package/kernel/mac80211/patches/312-mac80211-don-t-look-up-destination-station-twice.patch +++ b/package/kernel/mac80211/patches/312-mac80211-don-t-look-up-destination-station-twice.patch @@ -24,7 +24,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1895,6 +1895,7 @@ static struct sk_buff *ieee80211_build_h +@@ -1894,6 +1894,7 @@ static struct sk_buff *ieee80211_build_h bool wme_sta = false, authorized = false, tdls_auth = false; bool tdls_peer = false, tdls_setup_frame = false; bool multicast; @@ -32,7 +32,7 @@ Signed-off-by: Johannes Berg u16 info_id = 0; struct ieee80211_chanctx_conf *chanctx_conf; struct ieee80211_sub_if_data *ap_sdata; -@@ -1919,6 +1920,7 @@ static struct sk_buff *ieee80211_build_h +@@ -1918,6 +1919,7 @@ static struct sk_buff *ieee80211_build_h hdrlen = 30; authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); wme_sta = sta->sta.wme; @@ -40,7 +40,7 @@ Signed-off-by: Johannes Berg } ap_sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap); -@@ -2035,9 +2037,6 @@ static struct sk_buff *ieee80211_build_h +@@ -2034,9 +2036,6 @@ static struct sk_buff *ieee80211_build_h if (sdata->wdev.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) { sta = sta_info_get(sdata, skb->data); if (sta) { @@ -50,7 +50,7 @@ Signed-off-by: Johannes Berg tdls_peer = test_sta_flag(sta, WLAN_STA_TDLS_PEER); tdls_auth = test_sta_flag(sta, -@@ -2069,6 +2068,9 @@ static struct sk_buff *ieee80211_build_h +@@ -2068,6 +2067,9 @@ static struct sk_buff *ieee80211_build_h memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); memcpy(hdr.addr3, sdata->u.mgd.bssid, ETH_ALEN); hdrlen = 24; @@ -60,7 +60,7 @@ Signed-off-by: Johannes Berg } else if (sdata->u.mgd.use_4addr && cpu_to_be16(ethertype) != sdata->control_port_protocol) { fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | -@@ -2131,7 +2133,7 @@ static struct sk_buff *ieee80211_build_h +@@ -2130,7 +2132,7 @@ static struct sk_buff *ieee80211_build_h * in AP mode) */ multicast = is_multicast_ether_addr(hdr.addr1); diff --git a/package/kernel/mac80211/patches/313-mac80211-drop-4-addr-VLAN-frames-earlier-if-not-conn.patch b/package/kernel/mac80211/patches/313-mac80211-drop-4-addr-VLAN-frames-earlier-if-not-conn.patch index f493f654f8..41253519b3 100644 --- a/package/kernel/mac80211/patches/313-mac80211-drop-4-addr-VLAN-frames-earlier-if-not-conn.patch +++ b/package/kernel/mac80211/patches/313-mac80211-drop-4-addr-VLAN-frames-earlier-if-not-conn.patch @@ -15,7 +15,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1921,6 +1921,9 @@ static struct sk_buff *ieee80211_build_h +@@ -1920,6 +1920,9 @@ static struct sk_buff *ieee80211_build_h authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); wme_sta = sta->sta.wme; have_station = true; diff --git a/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch b/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch index c476dd463c..9105a64489 100644 --- a/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch +++ b/package/kernel/mac80211/patches/314-mac80211-mesh-avoid-pointless-station-lookup.patch @@ -12,7 +12,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -2131,12 +2131,14 @@ static struct sk_buff *ieee80211_build_h +@@ -2130,12 +2130,14 @@ static struct sk_buff *ieee80211_build_h } /* diff --git a/package/kernel/mac80211/patches/315-mac80211-avoid-duplicate-TX-path-station-lookup.patch b/package/kernel/mac80211/patches/315-mac80211-avoid-duplicate-TX-path-station-lookup.patch index 31ed830c2a..b02cdafd55 100644 --- a/package/kernel/mac80211/patches/315-mac80211-avoid-duplicate-TX-path-station-lookup.patch +++ b/package/kernel/mac80211/patches/315-mac80211-avoid-duplicate-TX-path-station-lookup.patch @@ -48,7 +48,7 @@ Signed-off-by: Johannes Berg --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1111,11 +1111,13 @@ static bool ieee80211_tx_prep_agg(struct +@@ -1110,11 +1110,13 @@ static bool ieee80211_tx_prep_agg(struct /* * initialises @tx @@ -63,7 +63,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = sdata->local; struct ieee80211_hdr *hdr; -@@ -1138,17 +1140,22 @@ ieee80211_tx_prepare(struct ieee80211_su +@@ -1137,17 +1139,22 @@ ieee80211_tx_prepare(struct ieee80211_su hdr = (struct ieee80211_hdr *) skb->data; @@ -96,7 +96,7 @@ Signed-off-by: Johannes Berg if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) && !ieee80211_is_qos_nullfunc(hdr->frame_control) && -@@ -1486,7 +1493,7 @@ bool ieee80211_tx_prepare_skb(struct iee +@@ -1485,7 +1492,7 @@ bool ieee80211_tx_prepare_skb(struct iee struct ieee80211_tx_data tx; struct sk_buff *skb2; @@ -105,7 +105,7 @@ Signed-off-by: Johannes Berg return false; info->band = band; -@@ -1519,7 +1526,8 @@ EXPORT_SYMBOL(ieee80211_tx_prepare_skb); +@@ -1518,7 +1525,8 @@ EXPORT_SYMBOL(ieee80211_tx_prepare_skb); * Returns false if the frame couldn't be transmitted but was queued instead. */ static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata, @@ -115,7 +115,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_data tx; -@@ -1535,7 +1543,7 @@ static bool ieee80211_tx(struct ieee8021 +@@ -1534,7 +1542,7 @@ static bool ieee80211_tx(struct ieee8021 /* initialises tx */ led_len = skb->len; @@ -124,7 +124,7 @@ Signed-off-by: Johannes Berg if (unlikely(res_prepare == TX_DROP)) { ieee80211_free_txskb(&local->hw, skb); -@@ -1591,7 +1599,8 @@ static int ieee80211_skb_resize(struct i +@@ -1590,7 +1598,8 @@ static int ieee80211_skb_resize(struct i return 0; } @@ -134,7 +134,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); -@@ -1626,7 +1635,7 @@ void ieee80211_xmit(struct ieee80211_sub +@@ -1625,7 +1634,7 @@ void ieee80211_xmit(struct ieee80211_sub } ieee80211_set_qos_hdr(sdata, skb); @@ -143,7 +143,7 @@ Signed-off-by: Johannes Berg } static bool ieee80211_parse_tx_radiotap(struct sk_buff *skb) -@@ -1847,7 +1856,7 @@ netdev_tx_t ieee80211_monitor_start_xmit +@@ -1846,7 +1855,7 @@ netdev_tx_t ieee80211_monitor_start_xmit goto fail_rcu; info->band = chandef->chan->band; @@ -152,7 +152,7 @@ Signed-off-by: Johannes Berg rcu_read_unlock(); return NETDEV_TX_OK; -@@ -1878,7 +1887,8 @@ fail: +@@ -1877,7 +1886,8 @@ fail: * Returns: the (possibly reallocated) skb or an ERR_PTR() code */ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, @@ -162,7 +162,7 @@ Signed-off-by: Johannes Berg { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_info *info; -@@ -1921,6 +1931,7 @@ static struct sk_buff *ieee80211_build_h +@@ -1920,6 +1930,7 @@ static struct sk_buff *ieee80211_build_h authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); wme_sta = sta->sta.wme; have_station = true; @@ -170,7 +170,7 @@ Signed-off-by: Johannes Berg } else if (sdata->wdev.use_4addr) { ret = -ENOLINK; goto free; -@@ -2074,6 +2085,7 @@ static struct sk_buff *ieee80211_build_h +@@ -2073,6 +2084,7 @@ static struct sk_buff *ieee80211_build_h have_station = true; authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); wme_sta = sta->sta.wme; @@ -178,7 +178,7 @@ Signed-off-by: Johannes Berg } else if (sdata->u.mgd.use_4addr && cpu_to_be16(ethertype) != sdata->control_port_protocol) { fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | -@@ -2137,13 +2149,18 @@ static struct sk_buff *ieee80211_build_h +@@ -2136,13 +2148,18 @@ static struct sk_buff *ieee80211_build_h * and mesh mode checks authorization later. */ multicast = is_multicast_ether_addr(hdr.addr1); @@ -200,7 +200,7 @@ Signed-off-by: Johannes Berg } /* For mesh, the use of the QoS header is mandatory */ -@@ -2321,6 +2338,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -2320,6 +2337,7 @@ void __ieee80211_subif_start_xmit(struct u32 info_flags) { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); @@ -208,7 +208,7 @@ Signed-off-by: Johannes Berg if (unlikely(skb->len < ETH_HLEN)) { kfree_skb(skb); -@@ -2329,7 +2347,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -2328,7 +2346,7 @@ void __ieee80211_subif_start_xmit(struct rcu_read_lock(); @@ -217,7 +217,7 @@ Signed-off-by: Johannes Berg if (IS_ERR(skb)) goto out; -@@ -2337,7 +2355,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -2336,7 +2354,7 @@ void __ieee80211_subif_start_xmit(struct dev->stats.tx_bytes += skb->len; dev->trans_start = jiffies; @@ -226,7 +226,7 @@ Signed-off-by: Johannes Berg out: rcu_read_unlock(); } -@@ -2365,10 +2383,11 @@ ieee80211_build_data_template(struct iee +@@ -2364,10 +2382,11 @@ ieee80211_build_data_template(struct iee .local = sdata->local, .sdata = sdata, }; @@ -239,7 +239,7 @@ Signed-off-by: Johannes Berg if (IS_ERR(skb)) goto out; -@@ -2426,7 +2445,7 @@ static bool ieee80211_tx_pending_skb(str +@@ -2425,7 +2444,7 @@ static bool ieee80211_tx_pending_skb(str return true; } info->band = chanctx_conf->def.chan->band; @@ -248,7 +248,7 @@ Signed-off-by: Johannes Berg } else { struct sk_buff_head skbs; -@@ -3164,7 +3183,7 @@ ieee80211_get_buffered_bc(struct ieee802 +@@ -3163,7 +3182,7 @@ ieee80211_get_buffered_bc(struct ieee802 if (sdata->vif.type == NL80211_IFTYPE_AP) sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev); @@ -257,7 +257,7 @@ Signed-off-by: Johannes Berg break; dev_kfree_skb_any(skb); } -@@ -3296,6 +3315,6 @@ void __ieee80211_tx_skb_tid_band(struct +@@ -3295,6 +3314,6 @@ void __ieee80211_tx_skb_tid_band(struct */ local_bh_disable(); IEEE80211_SKB_CB(skb)->band = band; diff --git a/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch index e13fe31d3f..52dad0bda1 100644 --- a/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch +++ b/package/kernel/mac80211/patches/522-mac80211_configure_antenna_gain.patch @@ -18,7 +18,7 @@ const u8 *addr); --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1167,6 +1167,7 @@ enum ieee80211_smps_mode { +@@ -1171,6 +1171,7 @@ enum ieee80211_smps_mode { * * @power_level: requested transmit power (in dBm), backward compatibility * value only that is set to the minimum of all interfaces @@ -26,7 +26,7 @@ * * @chandef: the channel definition to tune to * @radar_enabled: whether radar detection is enabled -@@ -1188,6 +1189,7 @@ struct ieee80211_conf { +@@ -1192,6 +1193,7 @@ struct ieee80211_conf { u32 flags; int power_level, dynamic_ps_timeout; int max_sleep_period; -- 2.11.0