Changeset 40590


Ignore:
Timestamp:
2014-04-29T17:52:03+02:00 (4 years ago)
Author:
nbd
Message:

ath9k: merge fixes for stability issues under heavy load

Signed-off-by: Felix Fietkau <nbd@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/kernel/mac80211/patches/300-pending_work.patch

    r40586 r40590  
     1commit c82552c5b0cb1735dbcbad78b1ffc6d3c212dc56 
     2Author: Tim Harvey <tharvey@gateworks.com> 
     3Date:   Mon Apr 21 16:14:57 2014 -0700 
     4 
     5    ath9k: add a recv budget 
     6     
     7    Implement a recv budget so that in cases of high traffic we still allow other 
     8    taskets to get processed. 
     9     
     10    Without this, we can encounter a host of issues during high wireless traffic 
     11    reception depending on system load including rcu stall's detected (ARM), 
     12    soft lockups, failure to service critical tasks such as watchdog resets, 
     13    and triggering of the tx stuck tasklet. 
     14     
     15    The same thing was proposed previously by Ben: 
     16     http://www.spinics.net/lists/linux-wireless/msg112891.html 
     17     
     18    The only difference here is that I make sure only processed packets are counted 
     19    in the budget by checking at the end of the rx loop. 
     20     
     21    Signed-off-by: Tim Harvey <tharvey@gateworks.com> 
     22    Acked-by: Felix Fietkau <nbd@openwrt.org> 
     23    Signed-off-by: John W. Linville <linville@tuxdriver.com> 
     24 
     25commit 3a758134e66ca74a9df792616b5288b2fa2cfd7f 
     26Author: Tim Harvey <tharvey@gateworks.com> 
     27Date:   Mon Apr 21 16:14:56 2014 -0700 
     28 
     29    ath9k: fix possible hang on flush 
     30     
     31    If a flush is requested, make sure to clear the descriptor once we've 
     32    processed it. 
     33     
     34    This resolves a hang that will occur if all RX descriptors are full when a 
     35    flush is requested. 
     36     
     37    Signed-off-by: Tim Harvey <tharvey@gateworks.com> 
     38    Acked-by: Felix Fietkau <nbd@openwrt.org> 
     39    Signed-off-by: John W. Linville <linville@tuxdriver.com> 
     40 
    141commit eefb1d6adc4c60d219182b8917e4567484ce07fc 
    242Author: Felix Fietkau <nbd@openwrt.org> 
     
    238278                __skb_queue_head_init(&tid->buf_q); 
    239279                __skb_queue_head_init(&tid->retry_q); 
     280--- a/drivers/net/wireless/ath/ath9k/recv.c 
     281+++ b/drivers/net/wireless/ath/ath9k/recv.c 
     282@@ -975,6 +975,7 @@ int ath_rx_tasklet(struct ath_softc *sc, 
     283        u64 tsf = 0; 
     284        unsigned long flags; 
     285        dma_addr_t new_buf_addr; 
     286+       unsigned int budget = 512; 
     287  
     288        if (edma) 
     289                dma_type = DMA_BIDIRECTIONAL; 
     290@@ -1113,15 +1114,17 @@ requeue_drop_frag: 
     291                } 
     292 requeue: 
     293                list_add_tail(&bf->list, &sc->rx.rxbuf); 
     294-               if (flush) 
     295-                       continue; 
     296  
     297                if (edma) { 
     298                        ath_rx_edma_buf_link(sc, qtype); 
     299                } else { 
     300                        ath_rx_buf_relink(sc, bf); 
     301-                       ath9k_hw_rxena(ah); 
     302+                       if (!flush) 
     303+                               ath9k_hw_rxena(ah); 
     304                } 
     305+ 
     306+               if (!budget--) 
     307+                       break; 
     308        } while (1); 
     309  
     310        if (!(ah->imask & ATH9K_INT_RXEOL)) { 
Note: See TracChangeset for help on using the changeset viewer.