ath9k: fix handling of tx headroom for padding (fixes #20556)

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 47042
v19.07.3_mercusys_ac12_duma
Felix Fietkau 9 years ago
parent 528d38b4e9
commit 6e97442105

@ -0,0 +1,22 @@
From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 24 Sep 2015 16:57:37 +0200
Subject: [PATCH] ath9k: declare required extra tx headroom
ath9k inserts padding between the 802.11 header and the data area (to
align it). Since it didn't declare this extra required headroom, this
led to some nasty issues like randomly dropped packets in some setups.
Cc: stable@vger.kernel.org
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -875,6 +875,7 @@ static void ath9k_set_hw_capab(struct at
hw->max_rate_tries = 10;
hw->sta_data_size = sizeof(struct ath_node);
hw->vif_data_size = sizeof(struct ath_vif);
+ hw->extra_tx_headroom = 4;
hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1;
hw->wiphy->available_antennas_tx = BIT(ah->caps.max_txchains) - 1;

@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -1031,23 +1031,23 @@ static int __init ath9k_init(void)
@@ -1032,23 +1032,23 @@ static int __init ath9k_init(void)
{
int error;

@ -165,7 +165,7 @@
void ath_fill_led_pin(struct ath_softc *sc)
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -943,7 +943,7 @@ int ath9k_init_device(u16 devid, struct
@@ -944,7 +944,7 @@ int ath9k_init_device(u16 devid, struct
#ifdef CPTCFG_MAC80211_LEDS
/* must be initialized before ieee80211_register_hw */

@ -65,7 +65,7 @@
}
static const struct ieee80211_iface_limit if_limits[] = {
@@ -903,6 +904,18 @@ static void ath9k_set_hw_capab(struct at
@@ -904,6 +905,18 @@ static void ath9k_set_hw_capab(struct at
SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
}
@ -84,7 +84,7 @@
int ath9k_init_device(u16 devid, struct ath_softc *sc,
const struct ath_bus_ops *bus_ops)
{
@@ -948,6 +961,8 @@ int ath9k_init_device(u16 devid, struct
@@ -949,6 +962,8 @@ int ath9k_init_device(u16 devid, struct
ARRAY_SIZE(ath9k_tpt_blink));
#endif

Loading…
Cancel
Save