On amd64, the `ieee80211_tx_info' struct takes 56 bytes, thus cannot fit into skb's control buffer. The very first result is that nothing can be really sent out, because skb's next member `len' also gets cleared when doing: info = IEEE80211_SKB_CB(skb); memset(info, 0, sizeof(*info)); A quick fix may be removing the TX control's sta pointer, since IMHO it's rarely used for now (the only place that I found was a function assigning values to it). It has been working well for me so far, but please let me know if there're better solutions. Thanks! Best regards, Gao Lei diff --git a/include/net/mac80211.h b/include/net/mac80211.h index e3adf99..b9a5ae7 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -331,7 +331,6 @@ struct ieee80211_tx_info { struct { struct ieee80211_vif *vif; struct ieee80211_key_conf *hw_key; - struct ieee80211_sta *sta; unsigned long jiffies; int ifindex; u16 aid; diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 7d1b32c..ee0ed32 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -540,9 +540,6 @@ ieee80211_tx_h_misc(struct ieee80211_tx_data *tx) sband = tx->local->hw.wiphy->bands[tx->channel->band]; - if (tx->sta) - info->control.sta = &tx->sta->sta; - if (!info->control.retry_limit) { if (!is_multicast_ether_addr(hdr->addr1)) { int len = min_t(int, tx->skb->len + FCS_LEN, @@ -620,9 +617,6 @@ ieee80211_tx_h_misc(struct ieee80211_tx_data *tx) info->control.rts_cts_rate_idx = 0; } - if (tx->sta) - info->control.sta = &tx->sta->sta; - return TX_CONTINUE; } -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html