Linux wireless drivers development
 help / color / mirror / Atom feed
From: Zhu Yi <yi.zhu@intel.com>
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org,
	Tomas Winkler <tomas.winkler@intel.com>,
	Ian Schram <ischram@telenet.be>, Zhu Yi <yi.zhu@intel.com>
Subject: [PATCH 31/39] iwlwifi: fix memory allocation of TX command
Date: Wed,  3 Sep 2008 11:26:51 +0800	[thread overview]
Message-ID: <1220412419-15404-32-git-send-email-yi.zhu@intel.com> (raw)
In-Reply-To: <1220412419-15404-31-git-send-email-yi.zhu@intel.com>

From: Tomas Winkler <tomas.winkler@intel.com>

This patch removes GFP_DMA from allocation tx command buffers
GFP_DMA allows allocation only for memory under 16M which causes
allocation problems suspend/resume flows.

Using kmalloc is temporal solution and some consistent/coherent
allocation schema will be more correct. Since iwlwifi hardware
supports 64bit address this solution should work on x86 (32 and
64bit) for now. This patch also fixes memory freeing in error path.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Ian Schram <ischram@telenet.be>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-tx.c |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 6cba5e9..68567fa 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -402,12 +402,11 @@ static int iwl_hw_tx_queue_init(struct iwl_priv *priv,
 /**
  * iwl_tx_queue_init - Allocate and initialize one tx/cmd queue
  */
-static int iwl_tx_queue_init(struct iwl_priv *priv,
-			     struct iwl_tx_queue *txq,
+static int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
 			     int slots_num, u32 txq_id)
 {
 	int i, len;
-	int rc = 0;
+	int ret;
 
 	/*
 	 * Alloc buffer array for commands (Tx or other types of commands).
@@ -426,19 +425,16 @@ static int iwl_tx_queue_init(struct iwl_priv *priv,
 				continue;
 		}
 
-		txq->cmd[i] = kmalloc(len, GFP_KERNEL | GFP_DMA);
+		txq->cmd[i] = kmalloc(len, GFP_KERNEL);
 		if (!txq->cmd[i])
-			return -ENOMEM;
+			goto err;
 	}
 
 	/* Alloc driver data array and TFD circular buffer */
-	rc = iwl_tx_queue_alloc(priv, txq, txq_id);
-	if (rc) {
-		for (i = 0; i < slots_num; i++)
-			kfree(txq->cmd[i]);
+	ret = iwl_tx_queue_alloc(priv, txq, txq_id);
+	if (ret)
+		goto err;
 
-		return -ENOMEM;
-	}
 	txq->need_update = 0;
 
 	/* TFD_QUEUE_SIZE_MAX must be power-of-two size, otherwise
@@ -452,6 +448,17 @@ static int iwl_tx_queue_init(struct iwl_priv *priv,
 	iwl_hw_tx_queue_init(priv, txq);
 
 	return 0;
+err:
+	for (i = 0; i < slots_num; i++) {
+		kfree(txq->cmd[i]);
+		txq->cmd[i] = NULL;
+	}
+
+	if (txq_id == IWL_CMD_QUEUE_NUM) {
+		kfree(txq->cmd[slots_num]);
+		txq->cmd[slots_num] = NULL;
+	}
+	return -ENOMEM;
 }
 /**
  * iwl_hw_txq_ctx_free - Free TXQ Context
-- 
1.5.3.6


  reply	other threads:[~2008-09-03  3:31 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-03  3:26 [PATCH 00/39] iwlwifi driver 09/03 updates Zhu Yi
2008-09-03  3:26 ` [PATCH 01/39] iwlwifi : Added bss_info_changed callback to 3945 Zhu Yi
2008-09-03  3:26   ` [PATCH 02/39] iwlwifi: W/A for the TSF correction in IBSS Zhu Yi
2008-09-03  3:26     ` [PATCH 03/39] iwlwifi: clean up hw scan handler Zhu Yi
2008-09-03  3:26       ` [PATCH 04/39] iwlwifi: remove obsolete 4965 forward declarations Zhu Yi
2008-09-03  3:26         ` [PATCH 05/39] iwlwifi: allow consecutive scans in unassociated state Zhu Yi
2008-09-03  3:26           ` [PATCH 06/39] iwlwifi: align set channel with mac80211 Zhu Yi
2008-09-03  3:26             ` [PATCH 07/39] iwl3945: fix unbalanced mutex Zhu Yi
2008-09-03  3:26               ` [PATCH 08/39] iwl3945: replace association and beacon hooks with bss_info_changed cb Zhu Yi
2008-09-03  3:26                 ` [PATCH 09/39] iwlwifi: fix hidden ssid discovery in passive channels Zhu Yi
2008-09-03  3:26                   ` [PATCH 10/39] iwl3945: removed bg_post_associate work Zhu Yi
2008-09-03  3:26                     ` [PATCH 11/39] iwl3945: avoid redundant iwl3945_get_active_dwell_time Zhu Yi
2008-09-03  3:26                       ` [PATCH 12/39] iwlwifi: use strict_strtoul instead of simple_strtoul Zhu Yi
2008-09-03  3:26                         ` [PATCH 13/39] iwlwifi: void full rxon on rx chain changes Zhu Yi
2008-09-03  3:26                           ` [PATCH 14/39] iwlwifi: replace readl and writel with io/read/write/32 Zhu Yi
2008-09-03  3:26                             ` [PATCH 15/39] iwlwifi: remove rfkill warning from iwl-io Zhu Yi
2008-09-03  3:26                               ` [PATCH 16/39] iwlwifi: fix apm_stop function Zhu Yi
2008-09-03  3:26                                 ` [PATCH 17/39] iwlwifi: generic init calibrations framework Zhu Yi
2008-09-03  3:26                                   ` [PATCH 18/39] iwlwifi: call apm stop on exit Zhu Yi
2008-09-03  3:26                                     ` [PATCH 19/39] iwlwifi: fix strict_strtoul error checking Zhu Yi
2008-09-03  3:26                                       ` [PATCH 20/39] iwlwifi: use station's mimo power save values Zhu Yi
2008-09-03  3:26                                         ` [PATCH 21/39] iwlwifi: fix rx_chain computation Zhu Yi
2008-09-03  3:26                                           ` [PATCH 22/39] iwlwifi: fix 64bit platform firmware loading Zhu Yi
2008-09-03  3:26                                             ` [PATCH 23/39] mac80211: change MIMO_PS to SM_PS Zhu Yi
2008-09-03  3:26                                               ` [PATCH 24/39] iwlwifi: " Zhu Yi
2008-09-03  3:26                                                 ` [PATCH 25/39] ath9k: " Zhu Yi
2008-09-03  3:26                                                   ` [PATCH 26/39] iwlwifi: remove double definition of SM PS Zhu Yi
2008-09-03  3:26                                                     ` [PATCH 27/39] iwlwifi: rename ps_mode to sm_ps Zhu Yi
2008-09-03  3:26                                                       ` [PATCH 28/39] iwlwifi: workaround interrupt handling no some platforms Zhu Yi
2008-09-03  3:26                                                         ` [PATCH 29/39] iwlwifi: cleanup PCI register handling Zhu Yi
2008-09-03  3:26                                                           ` [PATCH 30/39] iwlwifi: allow association on radar channel in power save Zhu Yi
2008-09-03  3:26                                                             ` Zhu Yi [this message]
2008-09-03  3:26                                                               ` [PATCH 32/39] iwlwifi: fix host command header according the HW spec Zhu Yi
2008-09-03  3:26                                                                 ` [PATCH 33/39] iwlwifi: use the results from disconnected antenna algorithm Zhu Yi
2008-09-03  3:26                                                                   ` [PATCH 34/39] iwlwifi: take a fresh set of supported rates at each cycle Zhu Yi
2008-09-03  3:26                                                                     ` [PATCH 35/39] iwlwifi: remove bad language from the comments Zhu Yi
2008-09-03  3:26                                                                       ` [PATCH 36/39] iwlwifi: remove uneeded declarations Zhu Yi
2008-09-03  3:26                                                                         ` [PATCH 37/39] iwlwifi: fix compile warning Zhu Yi
2008-09-03  3:26                                                                           ` [PATCH 38/39] iwl3945: enable active scanning on active channels Zhu Yi
2008-09-03  3:26                                                                             ` [PATCH 39/39] iwlwifi: enable packet injection for iwlagn Zhu Yi
2008-09-03 14:28                                                               ` [PATCH 31/39] iwlwifi: fix memory allocation of TX command Tomas Winkler
2008-09-05 21:14                 ` [PATCH 08/39] iwl3945: replace association and beacon hooks with bss_info_changed cb Johannes Berg
2008-09-05 22:50                   ` Kolekar, Abhijeet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1220412419-15404-32-git-send-email-yi.zhu@intel.com \
    --to=yi.zhu@intel.com \
    --cc=ischram@telenet.be \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=tomas.winkler@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox