lkml.org 
[lkml]   [2013]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 004/221] iwlwifi: silently ignore fw flaws in Tx path
    Date
    3.7-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

    commit 27edb1accf5695ff00a32c85c4a00ac7e1e7f298 upstream.

    We know that we have issues with the fw in the reclaim path.
    This is why iwl_reclaim doesn't complain too loud when it
    happens since it is recoverable. Somehow, the caller of
    iwl_reclaim however WARNed when it happens. This doesn't
    make any sense.

    When I digged into the history of that code, I discovered
    that this bug occurs only when we receive a BA notification.
    So move the W/A in the BA notification handling code where
    it was before.

    This patch addresses:
    http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2387

    Reported-by: Florian Reitmeir <florian@reitmeir.org>
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/iwlwifi/dvm/tx.c | 49 ++++++++++++----------------------
    1 file changed, 18 insertions(+), 31 deletions(-)

    --- a/drivers/net/wireless/iwlwifi/dvm/tx.c
    +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
    @@ -1100,29 +1100,6 @@ static void iwl_check_abort_status(struc
    }
    }

    -static int iwl_reclaim(struct iwl_priv *priv, int sta_id, int tid,
    - int txq_id, int ssn, struct sk_buff_head *skbs)
    -{
    - if (unlikely(txq_id >= IWLAGN_FIRST_AMPDU_QUEUE &&
    - tid != IWL_TID_NON_QOS &&
    - txq_id != priv->tid_data[sta_id][tid].agg.txq_id)) {
    - /*
    - * FIXME: this is a uCode bug which need to be addressed,
    - * log the information and return for now.
    - * Since it is can possibly happen very often and in order
    - * not to fill the syslog, don't use IWL_ERR or IWL_WARN
    - */
    - IWL_DEBUG_TX_QUEUES(priv,
    - "Bad queue mapping txq_id=%d, agg_txq[sta:%d,tid:%d]=%d\n",
    - txq_id, sta_id, tid,
    - priv->tid_data[sta_id][tid].agg.txq_id);
    - return 1;
    - }
    -
    - iwl_trans_reclaim(priv->trans, txq_id, ssn, skbs);
    - return 0;
    -}
    -
    int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
    struct iwl_device_cmd *cmd)
    {
    @@ -1184,9 +1161,8 @@ int iwlagn_rx_reply_tx(struct iwl_priv *
    next_reclaimed);
    }

    - /*we can free until ssn % q.n_bd not inclusive */
    - WARN_ON_ONCE(iwl_reclaim(priv, sta_id, tid,
    - txq_id, ssn, &skbs));
    + iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs);
    +
    iwlagn_check_ratid_empty(priv, sta_id, tid);
    freed = 0;

    @@ -1311,16 +1287,27 @@ int iwlagn_rx_reply_compressed_ba(struct
    return 0;
    }

    + if (unlikely(scd_flow != agg->txq_id)) {
    + /*
    + * FIXME: this is a uCode bug which need to be addressed,
    + * log the information and return for now.
    + * Since it is can possibly happen very often and in order
    + * not to fill the syslog, don't use IWL_ERR or IWL_WARN
    + */
    + IWL_DEBUG_TX_QUEUES(priv,
    + "Bad queue mapping txq_id=%d, agg_txq[sta:%d,tid:%d]=%d\n",
    + scd_flow, sta_id, tid, agg->txq_id);
    + spin_unlock(&priv->sta_lock);
    + return 0;
    + }
    +
    __skb_queue_head_init(&reclaimed_skbs);

    /* Release all TFDs before the SSN, i.e. all TFDs in front of
    * block-ack window (we assume that they've been successfully
    * transmitted ... if not, it's too late anyway). */
    - if (iwl_reclaim(priv, sta_id, tid, scd_flow,
    - ba_resp_scd_ssn, &reclaimed_skbs)) {
    - spin_unlock(&priv->sta_lock);
    - return 0;
    - }
    + iwl_trans_reclaim(priv->trans, scd_flow, ba_resp_scd_ssn,
    + &reclaimed_skbs);

    IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
    "sta_id = %d\n",



    \
     
     \ /
      Last update: 2013-01-15 21:02    [W:4.017 / U:0.416 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site