lkml.org 
[lkml]   [2012]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: ath: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x00008040
    From
    > /home/kernel/linux-next/drivers/net/wireless/ath/ath9k/ath9k.o...done.
    > (gdb) l *(ath_tx_start+0x284)
    > 0xcad4 is in ath_tx_start (drivers/net/wireless/ath/ath9k/xmit.c:1878).
    > 1873                    ieee80211_is_data_qos(hdr->frame_control)) {
    > 1874                    tidno = ieee80211_get_qos_ctl(hdr)[0] &
    > 1875                            IEEE80211_QOS_CTL_TID_MASK;
    > 1876                    tid = ATH_AN_2_TID(txctl->an, tidno);
    > 1877
    > 1878                    WARN_ON(tid->ac->txq != txctl->txq);
    > 1879            }
    > 1880
    > 1881            if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) {
    > 1882                    /*
    > (gdb

    please check with the attached debug patch if tid is 'NULL'


    its my theory that tid is not initialized in ath_tx_node_init just after resume.
    during suspend ath9k_sta_remove may be called
    ieee80211_suspend -> drv_sta_state ->
    drv_sta_remove->ath9k_sta_remove->ath_node_detach->ath_tx_node_cleanup

    during resume

    ieee80211_resume ->
    ieee80211_reconfig->drv_sta_state->ath9k_sta_add->ath_node_attach->ath_tx_node_init

    now sta.ht_cap.ht_supported should be true. it will be set to true in
    assoc_sucess path and then sta_add is called.

    let me see if i had missed something or my analysis itself is wrong.

    >



    --
    thanks,
    shafi
    diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
    index 834e6bc..eb22156 100644
    --- a/drivers/net/wireless/ath/ath9k/xmit.c
    +++ b/drivers/net/wireless/ath/ath9k/xmit.c
    @@ -1875,6 +1875,12 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,
    IEEE80211_QOS_CTL_TID_MASK;
    tid = ATH_AN_2_TID(txctl->an, tidno);

    + if (!tid) {
    + printk("\ntid is NULL!!!");
    + return;
    + }
    +
    +
    WARN_ON(tid->ac->txq != txctl->txq);
    }
    \
     
     \ /
      Last update: 2012-03-20 08:47    [W:0.023 / U:1.384 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site