On Sun, 2022-10-09 at 20:33 +0200, Felix Fietkau wrote: > > +static void __ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, > + struct sta_info *sta, > + struct ieee80211_fast_tx *fast_tx, > + struct sk_buff *skb, u8 tid, bool ampdu) > +{ > + struct ieee80211_local *local = sdata->local; > + struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; > + struct ieee80211_tx_info *info; > + struct ieee80211_tx_data tx; > + ieee80211_tx_result r; > + int hw_headroom = sdata->local->hw.extra_tx_headroom; > + int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); > + struct ethhdr eth; > + > /* after this point (skb is modified) we cannot return false */ That's now void so the comment is a bit misleading ... move it somewhere else? > +static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, > + struct sta_info *sta, > + struct ieee80211_fast_tx *fast_tx, > + struct sk_buff *skb) > +{ > + u16 ethertype = (skb->data[12] << 8) | skb->data[13]; > + struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; > + struct tid_ampdu_tx *tid_tx = NULL; > + struct sk_buff *next; > + u8 tid = IEEE80211_NUM_TIDS; > + > + /* control port protocol needs a lot of special handling */ > + if (cpu_to_be16(ethertype) == sdata->control_port_protocol) > + return false; > + > + /* only RFC 1042 SNAP */ > + if (ethertype < ETH_P_802_3_MIN) > + return false; > + > + /* don't handle TX status request here either */ > + if (skb->sk && skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS) > + return false; > + > + if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { > + tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; > + tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); > + if (tid_tx) { > + if (!test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) > + return false; > + if (tid_tx->timeout) > + tid_tx->last_tx = jiffies; > + } > + } > Here, I guess, or so? Another advantage _might_ be that you can create A-MSDUs now with frames that don't just belong to a single stream, unlike driver-created A-MSDUs from GSO? But then again I'm not really sure anymore how the A-MSDU creation works in the first place. johannes