mirror of
https://github.com/openwrt/openwrt.git
synced 2025-03-11 06:54:21 +00:00
Revert "ath9k: Add airtime fairness scheduler"
Accidentally pushed to the wrong branch This reverts commit 47bc081e76f6b04c0e9db687c8abb78eb437021f.
This commit is contained in:
parent
47bc081e76
commit
a032940bfb
@ -1,35 +0,0 @@
|
|||||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
|
|
||||||
Date: Mon, 5 Dec 2016 13:27:37 +0200
|
|
||||||
Subject: [PATCH] ath9k: Introduce airtime fairness scheduling between stations
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This reworks the ath9k driver to schedule transmissions to connected
|
|
||||||
stations in a way that enforces airtime fairness between them. It
|
|
||||||
accomplishes this by measuring the time spent transmitting to or
|
|
||||||
receiving from a station at TX and RX completion, and accounting this to
|
|
||||||
a per-station, per-QoS level airtime deficit. Then, an FQ-CoDel based
|
|
||||||
deficit scheduler is employed at packet dequeue time, to control which
|
|
||||||
station gets the next transmission opportunity.
|
|
||||||
|
|
||||||
Airtime fairness can significantly improve the efficiency of the network
|
|
||||||
when station rates vary. The following throughput values are from a
|
|
||||||
simple three-station test scenario, where two stations operate at the
|
|
||||||
highest HT20 rate, and one station at the lowest, and the scheduler is
|
|
||||||
employed at the access point:
|
|
||||||
|
|
||||||
Before / After
|
|
||||||
Fast station 1: 19.17 / 25.09 Mbps
|
|
||||||
Fast station 2: 19.83 / 25.21 Mbps
|
|
||||||
Slow station: 2.58 / 1.77 Mbps
|
|
||||||
Total: 41.58 / 52.07 Mbps
|
|
||||||
|
|
||||||
The benefit of airtime fairness goes up the more stations are present.
|
|
||||||
In a 30-station test with one station artificially limited to 1 Mbps,
|
|
||||||
we have seen aggregate throughput go from 2.14 to 17.76 Mbps.
|
|
||||||
|
|
||||||
Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
|
||||||
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
|
||||||
---
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
|
|
||||||
Date: Mon, 5 Dec 2016 13:27:38 +0200
|
|
||||||
Subject: [PATCH] ath9k: Turn ath_txq_lock/unlock() into static inlines.
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
These are one-line functions that just call spin_lock/unlock_bh(); turn
|
|
||||||
them into static inlines to avoid the function call overhead.
|
|
||||||
|
|
||||||
Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
|
||||||
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
|
||||||
@@ -558,6 +558,15 @@ static inline void ath_chanctx_check_act
|
|
||||||
|
|
||||||
#endif /* CPTCFG_ATH9K_CHANNEL_CONTEXT */
|
|
||||||
|
|
||||||
+static inline void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
+{
|
|
||||||
+ spin_lock_bh(&txq->axq_lock);
|
|
||||||
+}
|
|
||||||
+static inline void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
+{
|
|
||||||
+ spin_unlock_bh(&txq->axq_lock);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void ath_startrecv(struct ath_softc *sc);
|
|
||||||
bool ath_stoprecv(struct ath_softc *sc);
|
|
||||||
u32 ath_calcrxfilter(struct ath_softc *sc);
|
|
||||||
@@ -565,8 +574,6 @@ int ath_rx_init(struct ath_softc *sc, in
|
|
||||||
void ath_rx_cleanup(struct ath_softc *sc);
|
|
||||||
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp);
|
|
||||||
struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype);
|
|
||||||
-void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq);
|
|
||||||
-void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq);
|
|
||||||
void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq);
|
|
||||||
void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
|
|
||||||
bool ath_drain_all_txq(struct ath_softc *sc);
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
@@ -98,18 +98,6 @@ static void ath_tx_status(struct ieee802
|
|
||||||
dev_kfree_skb(skb);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
- __acquires(&txq->axq_lock)
|
|
||||||
-{
|
|
||||||
- spin_lock_bh(&txq->axq_lock);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
- __releases(&txq->axq_lock)
|
|
||||||
-{
|
|
||||||
- spin_unlock_bh(&txq->axq_lock);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq)
|
|
||||||
__releases(&txq->axq_lock)
|
|
||||||
{
|
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
@@ -837,6 +837,9 @@ static inline int ath9k_dump_btcoex(stru
|
@@ -827,6 +827,9 @@ static inline int ath9k_dump_btcoex(stru
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
void ath_init_leds(struct ath_softc *sc);
|
void ath_init_leds(struct ath_softc *sc);
|
||||||
void ath_deinit_leds(struct ath_softc *sc);
|
void ath_deinit_leds(struct ath_softc *sc);
|
||||||
@ -10,7 +10,7 @@
|
|||||||
#else
|
#else
|
||||||
static inline void ath_init_leds(struct ath_softc *sc)
|
static inline void ath_init_leds(struct ath_softc *sc)
|
||||||
{
|
{
|
||||||
@@ -973,6 +976,13 @@ void ath_ant_comb_scan(struct ath_softc
|
@@ -963,6 +966,13 @@ void ath_ant_comb_scan(struct ath_softc
|
||||||
|
|
||||||
#define ATH9K_NUM_CHANCTX 2 /* supports 2 operating channels */
|
#define ATH9K_NUM_CHANCTX 2 /* supports 2 operating channels */
|
||||||
|
|
||||||
@ -24,7 +24,7 @@
|
|||||||
struct ath_softc {
|
struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@@ -1025,9 +1035,8 @@ struct ath_softc {
|
@@ -1015,9 +1025,8 @@ struct ath_softc {
|
||||||
spinlock_t chan_lock;
|
spinlock_t chan_lock;
|
||||||
|
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
@@ -983,6 +984,14 @@ struct ath_led {
|
@@ -973,6 +974,14 @@ struct ath_led {
|
||||||
struct led_classdev cdev;
|
struct led_classdev cdev;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
struct ath_softc {
|
struct ath_softc {
|
||||||
struct ieee80211_hw *hw;
|
struct ieee80211_hw *hw;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@@ -1037,6 +1046,9 @@ struct ath_softc {
|
@@ -1027,6 +1036,9 @@ struct ath_softc {
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
const char *led_default_trigger;
|
const char *led_default_trigger;
|
||||||
struct list_head leds;
|
struct list_head leds;
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
---
|
---
|
||||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||||
@@ -1048,6 +1048,7 @@ struct ath_softc {
|
@@ -1038,6 +1038,7 @@ struct ath_softc {
|
||||||
struct list_head leds;
|
struct list_head leds;
|
||||||
#ifdef CONFIG_GPIOLIB
|
#ifdef CONFIG_GPIOLIB
|
||||||
struct ath9k_gpio_chip *gpiochip;
|
struct ath9k_gpio_chip *gpiochip;
|
||||||
|
@ -329,7 +329,7 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
|||||||
&ratesArray[0], cfgCtl,
|
&ratesArray[0], cfgCtl,
|
||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||||
@@ -1165,8 +1165,9 @@ static u8 ath_get_rate_txpower(struct at
|
@@ -1177,8 +1177,9 @@ static u8 ath_get_rate_txpower(struct at
|
||||||
if (is_40) {
|
if (is_40) {
|
||||||
u8 power_ht40delta;
|
u8 power_ht40delta;
|
||||||
struct ar5416_eeprom_def *eep = &ah->eeprom.def;
|
struct ar5416_eeprom_def *eep = &ah->eeprom.def;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user