Просмотр исходного кода

ath9k: fix tx queue debug counters

SVN-Revision: 25099
Felix Fietkau 15 лет назад
Родитель
Сommit
998da1234f
1 измененных файлов с 101 добавлено и 0 удалено
  1. 101 0
      package/mac80211/patches/540-ath9k_fix_queue_debug.patch

+ 101 - 0
package/mac80211/patches/540-ath9k_fix_queue_debug.patch

@@ -0,0 +1,101 @@
+--- a/drivers/net/wireless/ath/ath9k/debug.c
++++ b/drivers/net/wireless/ath/ath9k/debug.c
+@@ -450,14 +450,15 @@ static const struct file_operations fops
+ 	.llseek = default_llseek,
+ };
+ 
++#define PR_QNUM(_n) sc->tx.txq_map[_n]->axq_qnum
+ #define PR(str, elem)							\
+ 	do {								\
+ 		len += snprintf(buf + len, size - len,			\
+ 				"%s%13u%11u%10u%10u\n", str,		\
+-		sc->debug.stats.txstats[WME_AC_BE].elem, \
+-		sc->debug.stats.txstats[WME_AC_BK].elem, \
+-		sc->debug.stats.txstats[WME_AC_VI].elem, \
+-		sc->debug.stats.txstats[WME_AC_VO].elem); \
++		sc->debug.stats.txstats[PR_QNUM(WME_AC_BE)].elem, \
++		sc->debug.stats.txstats[PR_QNUM(WME_AC_BK)].elem, \
++		sc->debug.stats.txstats[PR_QNUM(WME_AC_VI)].elem, \
++		sc->debug.stats.txstats[PR_QNUM(WME_AC_VO)].elem); \
+ 		if (len >= size)			  \
+ 			goto done;			  \
+ } while(0)
+@@ -466,10 +467,10 @@ static const struct file_operations fops
+ do {									\
+ 	len += snprintf(buf + len, size - len,				\
+ 			"%s%13u%11u%10u%10u\n", str,			\
+-			(unsigned int)(sc->tx.txq[ATH_TXQ_AC_BE].elem),	\
+-			(unsigned int)(sc->tx.txq[ATH_TXQ_AC_BK].elem),	\
+-			(unsigned int)(sc->tx.txq[ATH_TXQ_AC_VI].elem),	\
+-			(unsigned int)(sc->tx.txq[ATH_TXQ_AC_VO].elem));	\
++			(unsigned int)(sc->tx.txq_map[WME_AC_BE]->elem),	\
++			(unsigned int)(sc->tx.txq_map[WME_AC_BK]->elem),	\
++			(unsigned int)(sc->tx.txq_map[WME_AC_VI]->elem),	\
++			(unsigned int)(sc->tx.txq_map[WME_AC_VO]->elem));	\
+ 	if (len >= size)						\
+ 		goto done;						\
+ } while(0)
+@@ -478,10 +479,10 @@ do {									\
+ do {									\
+ 	len += snprintf(buf + len, size - len,				\
+ 			"%s%13i%11i%10i%10i\n", str,			\
+-			list_empty(&sc->tx.txq[ATH_TXQ_AC_BE].elem),	\
+-			list_empty(&sc->tx.txq[ATH_TXQ_AC_BK].elem),	\
+-			list_empty(&sc->tx.txq[ATH_TXQ_AC_VI].elem),	\
+-			list_empty(&sc->tx.txq[ATH_TXQ_AC_VO].elem));	\
++			list_empty(&sc->tx.txq_map[WME_AC_BE]->elem),	\
++			list_empty(&sc->tx.txq_map[WME_AC_BK]->elem),	\
++			list_empty(&sc->tx.txq_map[WME_AC_VI]->elem),	\
++			list_empty(&sc->tx.txq_map[WME_AC_VO]->elem));	\
+ 	if (len >= size)						\
+ 		goto done;						\
+ } while (0)
+@@ -528,10 +529,10 @@ static ssize_t read_file_xmit(struct fil
+ 	PR("hw-tx-proc-desc: ", txprocdesc);
+ 	len += snprintf(buf + len, size - len,
+ 			"%s%11p%11p%10p%10p\n", "txq-memory-address:",
+-			&(sc->tx.txq[ATH_TXQ_AC_BE]),
+-			&(sc->tx.txq[ATH_TXQ_AC_BK]),
+-			&(sc->tx.txq[ATH_TXQ_AC_VI]),
+-			&(sc->tx.txq[ATH_TXQ_AC_VO]));
++			&(sc->tx.txq_map[WME_AC_BE]),
++			&(sc->tx.txq_map[WME_AC_BK]),
++			&(sc->tx.txq_map[WME_AC_VI]),
++			&(sc->tx.txq_map[WME_AC_VO]));
+ 	if (len >= size)
+ 		goto done;
+ 
+@@ -751,9 +752,9 @@ static ssize_t read_file_misc(struct fil
+ }
+ 
+ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf,
+-		       struct ath_tx_status *ts)
++		       struct ath_tx_status *ts, struct ath_txq *txq)
+ {
+-	int qnum = skb_get_queue_mapping(bf->bf_mpdu);
++	int qnum = txq->axq_qnum;
+ 
+ 	TX_STAT_INC(qnum, tx_pkts_all);
+ 	sc->debug.stats.txstats[qnum].tx_bytes_all += bf->bf_mpdu->len;
+--- a/drivers/net/wireless/ath/ath9k/debug.h
++++ b/drivers/net/wireless/ath/ath9k/debug.h
+@@ -175,7 +175,7 @@ int ath9k_init_debug(struct ath_hw *ah);
+ 
+ void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status);
+ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf,
+-		       struct ath_tx_status *ts);
++		       struct ath_tx_status *ts, struct ath_txq *txq);
+ void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs);
+ 
+ #else
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1913,7 +1913,7 @@ static void ath_tx_complete_buf(struct a
+ 		else
+ 			complete(&sc->paprd_complete);
+ 	} else {
+-		ath_debug_stat_tx(sc, bf, ts);
++		ath_debug_stat_tx(sc, bf, ts, txq);
+ 		ath_tx_complete(sc, skb, tx_flags,
+ 				bf->bf_state.bfs_ftype, txq);
+ 	}