source: branches/backfire/package/mac80211/patches/540-ath9k_limit_qlen.patch @ 28388

Last change on this file since 28388 was 28388, checked in by nbd, 5 years ago

mac80211: update to latest version from trunk

File size: 4.4 KB
  • drivers/net/wireless/ath/ath9k/ath9k.h

    a b struct ath_atx_tid { 
    237237        struct ath_node *an; 
    238238        struct ath_atx_ac *ac; 
    239239        unsigned long tx_buf[BITS_TO_LONGS(ATH_TID_MAX_BUFS)]; 
     240        int buf_pending; 
    240241        u16 seq_start; 
    241242        u16 seq_next; 
    242243        u16 baw_size; 
    struct ath_tx_control { 
    282283 *  (axq_qnum). 
    283284 */ 
    284285struct ath_tx { 
     286        u32 qlen_single; 
     287        u32 qlen_aggr; 
     288 
    285289        u16 seq_no; 
    286290        u32 txqsetup; 
    287291        spinlock_t txbuflock; 
  • drivers/net/wireless/ath/ath9k/debug.c

    a b int ath9k_init_debug(struct ath_hw *ah) 
    16541654                            sc, &fops_wiphy); 
    16551655        debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, 
    16561656                            &fops_xmit); 
     1657        debugfs_create_u32("qlen_single", S_IRUSR | S_IWUSR, 
     1658                           sc->debug.debugfs_phy, &sc->tx.qlen_single); 
     1659        debugfs_create_u32("qlen_aggr", S_IRUSR | S_IWUSR, 
     1660                           sc->debug.debugfs_phy, &sc->tx.qlen_aggr); 
    16571661        debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, 
    16581662                            &fops_stations); 
    16591663        debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, 
  • drivers/net/wireless/ath/ath9k/xmit.c

    a b static void ath_tx_count_frames(struct a 
    350350        } 
    351351} 
    352352 
     353static struct ath_atx_tid *ath_get_tid(struct ath_node *an, struct sk_buff *skb) 
     354{ 
     355        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 
     356        u8 tidno; 
     357 
     358        tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; 
     359        return ATH_AN_2_TID(an, tidno); 
     360} 
    353361 
    354362static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, 
    355363                                 struct ath_buf *bf, struct list_head *bf_q, 
    static void ath_tx_complete_aggr(struct  
    438446        __skb_queue_head_init(&bf_pending); 
    439447 
    440448        ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); 
     449        tid->buf_pending -= nframes; 
     450 
    441451        while (bf) { 
    442452                u16 seqno = bf->bf_state.seqno; 
    443453 
    static enum ATH_AGGR_STATUS ath_tx_form_ 
    816826                        ath_tx_addto_baw(sc, tid, seqno); 
    817827                bf->bf_state.ndelim = ndelim; 
    818828 
     829                tid->buf_pending++; 
    819830                __skb_unlink(skb, &tid->buf_q); 
    820831                list_add_tail(&bf->list, bf_q); 
    821832                if (bf_prev) 
    static void ath_tx_send_ampdu(struct ath 
    16931704        /* Add sub-frame to BAW */ 
    16941705        ath_tx_addto_baw(sc, tid, bf->bf_state.seqno); 
    16951706 
     1707        tid->buf_pending++; 
     1708 
    16961709        /* Queue to h/w without aggregation */ 
    16971710        TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw); 
    16981711        bf->bf_lastbf = bf; 
    error: 
    18211834 
    18221835/* FIXME: tx power */ 
    18231836static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb, 
    1824                              struct ath_tx_control *txctl) 
     1837                             struct ath_tx_control *txctl, 
     1838                             struct ath_atx_tid *tid) 
    18251839{ 
    18261840        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
    1827         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 
    1828         struct ath_atx_tid *tid = NULL; 
    18291841        struct ath_buf *bf; 
    1830         u8 tidno; 
    18311842 
    18321843        spin_lock_bh(&txctl->txq->axq_lock); 
    1833         if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an && 
    1834                 ieee80211_is_data_qos(hdr->frame_control)) { 
    1835                 tidno = ieee80211_get_qos_ctl(hdr)[0] & 
    1836                         IEEE80211_QOS_CTL_TID_MASK; 
    1837                 tid = ATH_AN_2_TID(txctl->an, tidno); 
    1838  
    1839                 WARN_ON(tid->ac->txq != txctl->txq); 
    1840         } 
    18411844 
    18421845        if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) { 
    18431846                /* 
    int ath_tx_start(struct ieee80211_hw *hw 
    18721875        struct ieee80211_vif *vif = info->control.vif; 
    18731876        struct ath_softc *sc = hw->priv; 
    18741877        struct ath_txq *txq = txctl->txq; 
     1878        struct ath_atx_tid *tid = NULL; 
    18751879        int padpos, padsize; 
    18761880        int frmlen = skb->len + FCS_LEN; 
    18771881        int q; 
    int ath_tx_start(struct ieee80211_hw *hw 
    19161920 
    19171921        setup_frame_info(hw, skb, frmlen); 
    19181922 
     1923        if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an && 
     1924            ieee80211_is_data_qos(hdr->frame_control)) { 
     1925                tid = ath_get_tid(txctl->an, skb); 
     1926 
     1927                WARN_ON(tid->ac->txq != txq); 
     1928        } 
     1929 
     1930        if ((info->flags & IEEE80211_TX_CTL_AMPDU) && tid) { 
     1931                if (sc->tx.qlen_aggr > 0 && skb_queue_len(&tid->buf_q) + 
     1932                    tid->buf_pending >= sc->tx.qlen_aggr) 
     1933                        return -ENOMEM; 
     1934        } else { 
     1935                if (sc->tx.qlen_single > 0 && 
     1936                    txq->axq_depth - txq->axq_ampdu_depth >= 
     1937                      sc->tx.qlen_single) 
     1938                        return -ENOMEM; 
     1939        } 
     1940 
    19191941        /* 
    19201942         * At this point, the vif, hw_key and sta pointers in the tx control 
    19211943         * info are no longer valid (overwritten by the ath_frame_info data. 
    int ath_tx_start(struct ieee80211_hw *hw 
    19301952        } 
    19311953        spin_unlock_bh(&txq->axq_lock); 
    19321954 
    1933         ath_tx_start_dma(sc, skb, txctl); 
     1955        ath_tx_start_dma(sc, skb, txctl, tid); 
    19341956        return 0; 
    19351957} 
    19361958 
Note: See TracBrowser for help on using the repository browser.