mirror of https://github.com/hak5/openwrt.git
madwifi: improve reliability of napi polling when fast framing is enabled
SVN-Revision: 14215lede-17.01
parent
21e15b7148
commit
cf3beca4a2
|
@ -0,0 +1,65 @@
|
||||||
|
--- a/ath/if_ath.c
|
||||||
|
+++ b/ath/if_ath.c
|
||||||
|
@@ -6723,10 +6723,10 @@ ath_rx_poll(struct net_device *dev, int
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
|
||||||
|
struct ath_softc *sc = container_of(napi, struct ath_softc, sc_napi);
|
||||||
|
struct net_device *dev = sc->sc_dev;
|
||||||
|
- u_int rx_limit = budget;
|
||||||
|
+ int rx_limit = budget;
|
||||||
|
#else
|
||||||
|
struct ath_softc *sc = dev->priv;
|
||||||
|
- u_int rx_limit = min(dev->quota, *budget);
|
||||||
|
+ int rx_limit = min(dev->quota, *budget);
|
||||||
|
#endif
|
||||||
|
struct ath_buf *bf;
|
||||||
|
struct ieee80211com *ic = &sc->sc_ic;
|
||||||
|
@@ -6769,13 +6769,15 @@ process_rx_again:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (rx_limit-- < 2) {
|
||||||
|
+ processed += ic->ic_recv;
|
||||||
|
+ rx_limit -= ic->ic_recv;
|
||||||
|
+ ic->ic_recv = 0;
|
||||||
|
+
|
||||||
|
+ /* keep a reserve for napi */
|
||||||
|
+ if (rx_limit < 4) {
|
||||||
|
early_stop = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
|
||||||
|
- processed++;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
skb = bf->bf_skb;
|
||||||
|
if (skb == NULL) {
|
||||||
|
@@ -7059,8 +7061,8 @@ rx_next:
|
||||||
|
if (sc->sc_isr & HAL_INT_RX) {
|
||||||
|
u_int64_t hw_tsf = ath_hal_gettsf64(ah);
|
||||||
|
sc->sc_isr &= ~HAL_INT_RX;
|
||||||
|
- local_irq_restore(flags);
|
||||||
|
ath_uapsd_processtriggers(sc, hw_tsf);
|
||||||
|
+ local_irq_restore(flags);
|
||||||
|
goto process_rx_again;
|
||||||
|
}
|
||||||
|
local_irq_restore(flags);
|
||||||
|
--- a/net80211/ieee80211_input.c
|
||||||
|
+++ b/net80211/ieee80211_input.c
|
||||||
|
@@ -1203,6 +1203,7 @@ ieee80211_deliver_data(struct ieee80211_
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ vap->iv_ic->ic_recv++;
|
||||||
|
if (skb != NULL) {
|
||||||
|
skb->dev = dev;
|
||||||
|
|
||||||
|
--- a/net80211/ieee80211_var.h
|
||||||
|
+++ b/net80211/ieee80211_var.h
|
||||||
|
@@ -323,6 +323,7 @@ struct ieee80211com {
|
||||||
|
struct ifmedia ic_media; /* interface media config */
|
||||||
|
u_int8_t ic_myaddr[IEEE80211_ADDR_LEN];
|
||||||
|
struct timer_list ic_inact; /* mgmt/inactivity timer */
|
||||||
|
+ u_int ic_recv; /* frame received counter */
|
||||||
|
|
||||||
|
unsigned int ic_subifs;
|
||||||
|
u_int32_t ic_flags; /* state flags */
|
|
@ -108,7 +108,7 @@
|
||||||
/*
|
/*
|
||||||
* Check if the MAC has multi-rate retry support.
|
* Check if the MAC has multi-rate retry support.
|
||||||
* We do this by trying to setup a fake extended
|
* We do this by trying to setup a fake extended
|
||||||
@@ -7553,7 +7561,7 @@ ath_txq_setup(struct ath_softc *sc, int
|
@@ -7555,7 +7563,7 @@ ath_txq_setup(struct ath_softc *sc, int
|
||||||
if (qtype == HAL_TX_QUEUE_UAPSD)
|
if (qtype == HAL_TX_QUEUE_UAPSD)
|
||||||
qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
|
qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue