Changeset 11923


Ignore:
Timestamp:
2008-07-26T00:35:36+02:00 (10 years ago)
Author:
nbd
Message:

madwifi: fix queue stop/start during key updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/madwifi/patches/300-napi_polling.patch

    r11848 r11923  
    108108                dev->flags &= ~IFF_RUNNING;     /* NB: avoid recursion */ 
    109109                ieee80211_stop_running(ic);     /* stop all VAPs */ 
    110 @@ -4013,6 +4051,39 @@ 
     110@@ -4013,12 +4051,47 @@ 
    111111        return ath_keyset(sc, k, mac, vap->iv_bss); 
    112112 } 
     
    148148  * Block/unblock tx+rx processing while a key change is done. 
    149149  * We assume the caller serializes key management operations 
    150 @@ -4032,13 +4103,7 @@ 
     150  * so we only need to worry about synchronization with other 
     151  * uses that originate in the driver. 
     152  */ 
     153+#define        IS_UP(_dev) \ 
     154+       (((_dev)->flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP)) 
     155 static void 
     156 ath_key_update_begin(struct ieee80211vap *vap) 
     157 { 
     158@@ -4032,14 +4105,9 @@ 
    151159         * When called from the rx tasklet we cannot use 
    152160         * tasklet_disable because it will block waiting 
     
    159167-       if (!in_softirq()) 
    160168-               tasklet_disable(&sc->sc_rxtq); 
    161         netif_stop_queue(dev); 
    162  } 
    163   
    164 @@ -4051,9 +4116,9 @@ 
     169-       netif_stop_queue(dev); 
     170+       if (IS_UP(vap->iv_dev)) 
     171+               netif_stop_queue(dev); 
     172 } 
     173  
     174 static void 
     175@@ -4051,9 +4119,9 @@ 
    165176 #endif 
    166177  
     
    170181-               tasklet_enable(&sc->sc_rxtq); 
    171182+ 
    172 +       if (dev->flags&IFF_RUNNING) 
     183+       if (IS_UP(vap->iv_dev)) 
    173184+               netif_wake_queue(dev); 
    174185 } 
    175186  
    176187 /* 
    177 @@ -6360,15 +6425,25 @@ 
     188@@ -6360,15 +6428,25 @@ 
    178189        sc->sc_rxotherant = 0; 
    179190 } 
     
    205216        struct ath_hal *ah = sc ? sc->sc_ah : NULL; 
    206217        struct ath_desc *ds; 
    207 @@ -6378,8 +6453,10 @@ 
     218@@ -6378,8 +6456,10 @@ 
    208219        unsigned int len; 
    209220        int type; 
     
    216227                bf = STAILQ_FIRST(&sc->sc_rxbuf); 
    217228                if (bf == NULL) {               /* XXX ??? can this happen */ 
    218 @@ -6403,6 +6480,15 @@ 
     229@@ -6403,6 +6483,15 @@ 
    219230                        /* NB: never process the self-linked entry at the end */ 
    220231                        break; 
     
    232243                if (skb == NULL) { 
    233244                        EPRINTF(sc, "Dropping; buffer contains NULL skbuff.\n"); 
    234 @@ -6450,6 +6536,7 @@ 
     245@@ -6450,6 +6539,7 @@ 
    235246                                sc->sc_stats.ast_rx_phyerr++; 
    236247                                phyerr = rs->rs_phyerr & 0x1f; 
     
    240251                        if (rs->rs_status & HAL_RXERR_DECRYPT) { 
    241252                                /* 
    242 @@ -6645,9 +6732,43 @@ 
     253@@ -6645,9 +6735,43 @@ 
    243254                STAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list); 
    244255                ATH_RXBUF_UNLOCK_IRQ(sc); 
     
    284295 } 
    285296  
    286 @@ -8298,12 +8419,24 @@ 
     297@@ -8298,12 +8422,24 @@ 
    287298 { 
    288299        struct net_device *dev = (struct net_device *)data; 
     
    309320  
    310321        if (sc->sc_softled) 
    311 @@ -8319,7 +8452,9 @@ 
     322@@ -8319,7 +8455,9 @@ 
    312323 { 
    313324        struct net_device *dev = (struct net_device *)data; 
     
    319330         * Process each active queue. 
    320331         */ 
    321 @@ -8340,6 +8475,16 @@ 
     332@@ -8340,6 +8478,16 @@ 
    322333        if (sc->sc_uapsdq && txqactive(sc->sc_ah, sc->sc_uapsdq->axq_qnum)) 
    323334                ath_tx_processq(sc, sc->sc_uapsdq); 
     
    336347  
    337348        if (sc->sc_softled) 
    338 @@ -8355,13 +8500,25 @@ 
     349@@ -8355,13 +8503,25 @@ 
    339350        struct net_device *dev = (struct net_device *)data; 
    340351        struct ath_softc *sc = dev->priv; 
     
    362373  
    363374        if (sc->sc_softled) 
    364 @@ -10296,9 +10453,9 @@ 
     375@@ -10296,9 +10456,9 @@ 
    365376        dev->mtu = mtu; 
    366377        if ((dev->flags & IFF_RUNNING) && !sc->sc_invalid) { 
Note: See TracChangeset for help on using the changeset viewer.