From 528f46d0826afa01877ccc7670f2120a7a3b3ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Mon, 19 Dec 2016 13:59:15 +0100 Subject: ath9k: Add airtime fairness scheduler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a patch that introduces airtime fairness scheduling to ath9k, which can significantly improve network efficiency in mixed-rate environments. Signed-off-by: Toke Høiland-Jørgensen Signed-off-by: Felix Fietkau --- ...n-ath_txq_lock-unlock-into-static-inlines.patch | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 package/kernel/mac80211/patches/345-ath9k-Turn-ath_txq_lock-unlock-into-static-inlines.patch (limited to 'package/kernel/mac80211/patches/345-ath9k-Turn-ath_txq_lock-unlock-into-static-inlines.patch') diff --git a/package/kernel/mac80211/patches/345-ath9k-Turn-ath_txq_lock-unlock-into-static-inlines.patch b/package/kernel/mac80211/patches/345-ath9k-Turn-ath_txq_lock-unlock-into-static-inlines.patch new file mode 100644 index 0000000000..734ba22af1 --- /dev/null +++ b/package/kernel/mac80211/patches/345-ath9k-Turn-ath_txq_lock-unlock-into-static-inlines.patch @@ -0,0 +1,62 @@ +From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= +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 +Signed-off-by: Kalle Valo +--- + +--- a/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/drivers/net/wireless/ath/ath9k/ath9k.h +@@ -569,6 +569,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); +@@ -576,8 +585,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) + { -- cgit v1.2.3