From patchwork Fri Apr 9 15:38:07 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "John W. Linville" X-Patchwork-Id: 49850 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7D641B7C8E for ; Sat, 10 Apr 2010 01:45:44 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754590Ab0DIPpX (ORCPT ); Fri, 9 Apr 2010 11:45:23 -0400 Received: from charlotte.tuxdriver.com ([70.61.120.58]:51104 "EHLO smtp.tuxdriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753839Ab0DIPpU (ORCPT ); Fri, 9 Apr 2010 11:45:20 -0400 Received: from uucp by smtp.tuxdriver.com with local-rmail (Exim 4.63) (envelope-from ) id 1O0GOS-0003kR-Iv; Fri, 09 Apr 2010 11:45:16 -0400 Received: from linville-t400.local (linville-t400.local [127.0.0.1]) by linville-t400.local (8.14.3/8.14.3) with ESMTP id o39Fc76I004270; Fri, 9 Apr 2010 11:38:07 -0400 Received: (from linville@localhost) by linville-t400.local (8.14.3/8.14.3/Submit) id o39Fc7Hi004268; Fri, 9 Apr 2010 11:38:07 -0400 Date: Fri, 9 Apr 2010 11:38:07 -0400 From: "John W. Linville" To: davem@davemloft.net Cc: Jeff Chua , "Zhao, Shanyu" , "Chatre, Reinette" , "stable@kernel.org" , Linux Kernel , Linus Torvalds , Al Viro , "Guy, Wey-Yi" , linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: pull request: wireless-2.6 2010-04-09 Message-ID: <20100409153807.GA3014@tuxdriver.com> References: <1270759800.19330.19.camel@wwguy-ubuntu> <20100408200218.GC2999@tuxdriver.com> <1270762107.20845.3.camel@wwguy-ubuntu> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1270762107.20845.3.camel@wwguy-ubuntu> User-Agent: Mutt/1.5.19 (2009-01-05) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Dave, This fix is intended for 2.6.34. It resolves an issue involving an Oops on boxes w/ iwl4965 hardware, apparently introduced by another recent patch. The thread describing the issue and the resolution is here: http://marc.info/?l=linux-kernel&m=127074721531649&w=2 In order to avoid reverting that patch, please accept this fix instead. As usual, please let me know if there are problems! Thanks, John --- The following changes since commit 2626419ad5be1a054d350786b684b41d23de1538: David S. Miller (1): tcp: Set CHECKSUM_UNNECESSARY in tcp_init_nondata_skb are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git master Wey-Yi Guy (1): iwlwifi: need check for valid qos packet before free drivers/net/wireless/iwlwifi/iwl-4965.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index 83c52a6..8972166 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c @@ -2015,7 +2015,9 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv, IWL_DEBUG_TX_REPLY(priv, "Retry scheduler reclaim scd_ssn " "%d index %d\n", scd_ssn , index); freed = iwl_tx_queue_reclaim(priv, txq_id, index); - iwl_free_tfds_in_queue(priv, sta_id, tid, freed); + if (qc) + iwl_free_tfds_in_queue(priv, sta_id, + tid, freed); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark) && @@ -2041,14 +2043,17 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv, tx_resp->failure_frame); freed = iwl_tx_queue_reclaim(priv, txq_id, index); - iwl_free_tfds_in_queue(priv, sta_id, tid, freed); + if (qc && likely(sta_id != IWL_INVALID_STATION)) + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); + else if (sta_id == IWL_INVALID_STATION) + IWL_DEBUG_TX_REPLY(priv, "Station not known\n"); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark)) iwl_wake_queue(priv, txq_id); } - - iwl_txq_check_empty(priv, sta_id, tid, txq_id); + if (qc && likely(sta_id != IWL_INVALID_STATION)) + iwl_txq_check_empty(priv, sta_id, tid, txq_id); if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n");