linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org,
	Johannes Berg <johannes.berg@intel.com>,
	Wey-Yi Guy <wey-yi.w.guy@intel.com>
Subject: [PATCH 006/101] iwlwifi: introduce per-queue locks
Date: Sun,  4 Mar 2012 11:28:20 -0800	[thread overview]
Message-ID: <1330889395-533-7-git-send-email-wey-yi.w.guy@intel.com> (raw)
In-Reply-To: <1330889395-533-1-git-send-email-wey-yi.w.guy@intel.com>

From: Johannes Berg <johannes.berg@intel.com>

Instead of (ab)using the sta_lock, make the
transport layer lock its own TX queue data
structures with a lock per queue. This also
unifies with the cmd queue lock.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h |    2 +
 drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c  |   20 ++++++++-----
 drivers/net/wireless/iwlwifi/iwl-trans-pcie.c     |   31 +++++++++++++--------
 drivers/net/wireless/iwlwifi/iwl-trans.h          |    2 -
 4 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
index 5b26b71..b102946 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
@@ -169,6 +169,7 @@ struct iwl_queue {
  * @meta: array of meta data for each command/tx buffer
  * @dma_addr_cmd: physical address of cmd/tx buffer array
  * @txb: array of per-TFD driver data
+ * lock: queue lock
  * @time_stamp: time (in jiffies) of last read_ptr change
  * @need_update: indicates need to update read/write index
  * @sched_retry: indicates queue is high-throughput aggregation (HT AGG) enabled
@@ -187,6 +188,7 @@ struct iwl_tx_queue {
 	struct iwl_device_cmd **cmd;
 	struct iwl_cmd_meta *meta;
 	struct sk_buff **skbs;
+	spinlock_t lock;
 	unsigned long time_stamp;
 	u8 need_update;
 	u8 sched_retry;
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
index 82e3448..1cb1dd2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
@@ -217,6 +217,8 @@ void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
 {
 	struct iwl_tfd *tfd_tmp = txq->tfds;
 
+	lockdep_assert_held(&txq->lock);
+
 	iwlagn_unmap_tfd(trans, &txq->meta[index], &tfd_tmp[index], dma_dir);
 
 	/* free SKB */
@@ -621,7 +623,6 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
 	struct iwl_device_cmd *out_cmd;
 	struct iwl_cmd_meta *out_meta;
 	dma_addr_t phys_addr;
-	unsigned long flags;
 	u32 idx;
 	u16 copy_size, cmd_size;
 	bool is_ct_kill = false;
@@ -680,10 +681,10 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
 		return -EIO;
 	}
 
-	spin_lock_irqsave(&trans->hcmd_lock, flags);
+	spin_lock_bh(&txq->lock);
 
 	if (iwl_queue_space(q) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
-		spin_unlock_irqrestore(&trans->hcmd_lock, flags);
+		spin_unlock_bh(&txq->lock);
 
 		IWL_ERR(trans, "No space in command queue\n");
 		is_ct_kill = iwl_check_for_ct_kill(priv(trans));
@@ -790,7 +791,7 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
 	iwl_txq_update_write_ptr(trans, txq);
 
  out:
-	spin_unlock_irqrestore(&trans->hcmd_lock, flags);
+	spin_unlock_bh(&txq->lock);
 	return idx;
 }
 
@@ -809,6 +810,8 @@ static void iwl_hcmd_queue_reclaim(struct iwl_trans *trans, int txq_id,
 	struct iwl_queue *q = &txq->q;
 	int nfreed = 0;
 
+	lockdep_assert_held(&txq->lock);
+
 	if ((idx >= q->n_bd) || (iwl_queue_used(q, idx) == 0)) {
 		IWL_ERR(trans, "%s: Read index for DMA queue txq id (%d), "
 			  "index %d is out of range [0-%d] %d %d.\n", __func__,
@@ -850,7 +853,6 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans, struct iwl_rx_mem_buffer *rxb,
 	struct iwl_cmd_meta *meta;
 	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
 	struct iwl_tx_queue *txq = &trans_pcie->txq[trans->shrd->cmd_queue];
-	unsigned long flags;
 
 	/* If a Tx command is being handled and it isn't in the actual
 	 * command queue then there a command routing bug has been introduced
@@ -864,6 +866,8 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans, struct iwl_rx_mem_buffer *rxb,
 		return;
 	}
 
+	spin_lock(&txq->lock);
+
 	cmd_index = get_cmd_index(&txq->q, index);
 	cmd = txq->cmd[cmd_index];
 	meta = &txq->meta[cmd_index];
@@ -880,8 +884,6 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans, struct iwl_rx_mem_buffer *rxb,
 		rxb->page = NULL;
 	}
 
-	spin_lock_irqsave(&trans->hcmd_lock, flags);
-
 	iwl_hcmd_queue_reclaim(trans, txq_id, index);
 
 	if (!(meta->flags & CMD_ASYNC)) {
@@ -898,7 +900,7 @@ void iwl_tx_cmd_complete(struct iwl_trans *trans, struct iwl_rx_mem_buffer *rxb,
 
 	meta->flags = 0;
 
-	spin_unlock_irqrestore(&trans->hcmd_lock, flags);
+	spin_unlock(&txq->lock);
 }
 
 #define HOST_COMPLETE_TIMEOUT (2 * HZ)
@@ -1041,6 +1043,8 @@ int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
 	if (WARN_ON(txq_id == trans->shrd->cmd_queue))
 		return 0;
 
+	lockdep_assert_held(&txq->lock);
+
 	/*Since we free until index _not_ inclusive, the one before index is
 	 * the last we will free. This one must be used */
 	last_to_free = iwl_queue_dec_wrap(index, q->n_bd);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index 9f8b239..f47426a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -390,6 +390,8 @@ static int iwl_trans_txq_init(struct iwl_trans *trans, struct iwl_tx_queue *txq,
 	if (ret)
 		return ret;
 
+	spin_lock_init(&txq->lock);
+
 	/*
 	 * Tell nic where to find circular buffer of Tx Frame Descriptors for
 	 * given Tx queue, and enable the DMA channel used for that queue.
@@ -409,8 +411,6 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id)
 	struct iwl_tx_queue *txq = &trans_pcie->txq[txq_id];
 	struct iwl_queue *q = &txq->q;
 	enum dma_data_direction dma_dir;
-	unsigned long flags;
-	spinlock_t *lock;
 
 	if (!q->n_bd)
 		return;
@@ -418,22 +418,19 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id)
 	/* In the command queue, all the TBs are mapped as BIDI
 	 * so unmap them as such.
 	 */
-	if (txq_id == trans->shrd->cmd_queue) {
+	if (txq_id == trans->shrd->cmd_queue)
 		dma_dir = DMA_BIDIRECTIONAL;
-		lock = &trans->hcmd_lock;
-	} else {
+	else
 		dma_dir = DMA_TO_DEVICE;
-		lock = &trans->shrd->sta_lock;
-	}
 
-	spin_lock_irqsave(lock, flags);
+	spin_lock_bh(&txq->lock);
 	while (q->write_ptr != q->read_ptr) {
 		/* The read_ptr needs to bound by q->n_window */
 		iwlagn_txq_free_tfd(trans, txq, get_cmd_index(q, q->read_ptr),
 				    dma_dir);
 		q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd);
 	}
-	spin_unlock_irqrestore(lock, flags);
+	spin_unlock_bh(&txq->lock);
 }
 
 /**
@@ -1358,6 +1355,8 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 	txq = &trans_pcie->txq[txq_id];
 	q = &txq->q;
 
+	spin_lock(&txq->lock);
+
 	/* In AGG mode, the index in the ring must correspond to the WiFi
 	 * sequence number. This is a HW requirements to help the SCD to parse
 	 * the BA.
@@ -1404,7 +1403,7 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 				    &dev_cmd->hdr, firstlen,
 				    DMA_BIDIRECTIONAL);
 	if (unlikely(dma_mapping_error(trans->dev, txcmd_phys)))
-		return -1;
+		goto out_err;
 	dma_unmap_addr_set(out_meta, mapping, txcmd_phys);
 	dma_unmap_len_set(out_meta, len, firstlen);
 
@@ -1426,7 +1425,7 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 					 dma_unmap_addr(out_meta, mapping),
 					 dma_unmap_len(out_meta, len),
 					 DMA_BIDIRECTIONAL);
-			return -1;
+			goto out_err;
 		}
 	}
 
@@ -1481,7 +1480,11 @@ static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 			iwl_stop_queue(trans, txq, "Queue is full");
 		}
 	}
+	spin_unlock(&txq->lock);
 	return 0;
+ out_err:
+	spin_unlock(&txq->lock);
+	return -1;
 }
 
 static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
@@ -1560,6 +1563,8 @@ static int iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid,
 	int tfd_num = ssn & (txq->q.n_bd - 1);
 	int freed = 0;
 
+	spin_lock(&txq->lock);
+
 	txq->time_stamp = jiffies;
 
 	if (unlikely(txq_id >= IWLAGN_FIRST_AMPDU_QUEUE &&
@@ -1574,6 +1579,7 @@ static int iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid,
 		IWL_DEBUG_TX_QUEUES(trans, "Bad queue mapping txq_id %d, "
 			"agg_txq[sta_id[tid] %d", txq_id,
 			trans_pcie->agg_txq[sta_id][tid]);
+		spin_unlock(&txq->lock);
 		return 1;
 	}
 
@@ -1587,6 +1593,8 @@ static int iwl_trans_pcie_reclaim(struct iwl_trans *trans, int sta_id, int tid,
 		   status != TX_STATUS_FAIL_PASSIVE_NO_RX))
 			iwl_wake_queue(trans, txq, "Packets reclaimed");
 	}
+
+	spin_unlock(&txq->lock);
 	return 0;
 }
 
@@ -2267,7 +2275,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct iwl_shared *shrd,
 	trans->ops = &trans_ops_pcie;
 	trans->shrd = shrd;
 	trans_pcie->trans = trans;
-	spin_lock_init(&trans->hcmd_lock);
 	spin_lock_init(&trans_pcie->irq_lock);
 
 	/* W/A - seems to solve weird behavior. We need to remove this if we
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 4e7e6c0..e2f21cf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -309,7 +309,6 @@ enum iwl_trans_state {
  * @ops - pointer to iwl_trans_ops
  * @op_mode - pointer to the op_mode
  * @shrd - pointer to iwl_shared which holds shared data from the upper layer
- * @hcmd_lock: protects HCMD
  * @reg_lock - protect hw register access
  * @dev - pointer to struct device * that represents the device
  * @irq - the irq number for the device
@@ -326,7 +325,6 @@ struct iwl_trans {
 	struct iwl_op_mode *op_mode;
 	struct iwl_shared *shrd;
 	enum iwl_trans_state state;
-	spinlock_t hcmd_lock;
 	spinlock_t reg_lock;
 
 	struct device *dev;
-- 
1.7.0.4


  parent reply	other threads:[~2012-03-04 20:42 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-04 19:28 [PATCH 000/101] update for 3.4: iwlwifi 2012-03-04 Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 001/101] iwlwifi: move iwl_clear_driver_stations to user Wey-Yi Guy
2012-03-05  1:32   ` David Miller
2012-03-05  0:37     ` Guy, Wey-Yi
2012-03-05 19:59       ` John W. Linville
2012-03-04 19:28 ` [PATCH 002/101] iwlwifi: remove an unused argument Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 003/101] iwlwifi: reduce sta_lock hold time in TX Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 004/101] iwlwifi: simplify code in iwlagn_key_sta_id Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 005/101] iwlwifi: build some station commands directly Wey-Yi Guy
2012-03-04 19:28 ` Wey-Yi Guy [this message]
2012-03-04 19:28 ` [PATCH 007/101] iwlwifi: make sta lock private & BH lock Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 008/101] iwlwifi: introduce statistics lock Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 009/101] iwlwifi: remove shared lock Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 010/101] iwlwifi: make EXIT_PENDING depend on mac80211 Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 011/101] iwlwifi: simplify auth/assoc flow Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 012/101] iwlwifi: remove per-device debug level Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 013/101] iwlwifi: remove SKU from config Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 014/101] iwlwifi: use valid TX/RX antenna from hw_params Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 015/101] iwlwifi: make config const Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 016/101] iwlwifi: reduce IDI code ifdef Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 017/101] iwlwifi: clean up (wowlan) suspend flow Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 018/101] iwlwifi: move wowlan bool into priv Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 019/101] iwlwifi: use ieee80211_tx_status Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 020/101] iwlwifi: pass response packet directly Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 021/101] iwlwifi: don't pass iwl_rx_mem_buffer to upper layers Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 022/101] iwlwifi: refactor PCI-E RX path Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 023/101] iwlwifi: transport's tx_agg_alloc must not sleep Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 024/101] iwlwifi: move queue functions to PCI-E Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 025/101] iwlwifi: iwl_rx_cmd_buffer belongs to transport API Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 026/101] iwlwifi: move tid_to_ac to PCI-E Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 027/101] iwlwifi: move IWL_MASK into file using it Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 028/101] iwlwifi: move traffic log definitions Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 029/101] iwlwifi: fix station HT parameters Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 030/101] iwlwifi: move uCode deallocation to drv Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 031/101] iwlwifi: move iwl_base_params to shared header Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 032/101] iwlwifi: move firmware request into drv Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 033/101] iwlwifi: move firmware completion wait Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 034/101] iwlwifi: move ucode loading to op_mode Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 035/101] iwlwifi: split out firmware store Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 036/101] iwlwifi: remove iwl-wifi.h Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 037/101] iwlwifi: add wrappers for command sending Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 038/101] iwlwifi: move RF/CT kill check to command wrapper Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 039/101] iwlwifi: move lockdep assertion into DVM Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 040/101] iwlwifi: move mutex out of shared Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 041/101] iwlwifi: move rfkill status handling out of transport Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 042/101] iwlwifi: rename ucode.h to fw-file.h Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 043/101] iwlwifi: remove AMT check from transport Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 044/101] iwlwifi: remove shadow_reg_enable from hw_params Wey-Yi Guy
2012-03-04 19:28 ` [PATCH 045/101] iwlwifi: move status check functions out of shared Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 046/101] iwlwifi: make tracing use device as identifier Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 047/101] iwlwifi: virtualize command queue full behaviour Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 048/101] iwlwifi: clean up iwl-core.h inclusions Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 049/101] iwlwifi: remove num_of_queues module parameter Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 050/101] iwlwifi: remove max_txq_num from hw_params Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 051/101] iwlwifi: keep plcp_delta_threshold in priv Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 052/101] iwlwifi: use watchdog timeout from hw_params Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 053/101] iwlwifi: put use_rts_for_aggregation into hw_params Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 054/101] iwlwifi: constify remaining config data Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 055/101] iwlwifi: fix notification wait bug Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 056/101] iwlwifi: abstract out notification wait support Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 057/101] iwlwifi: move ucode_owner to priv Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 058/101] iwlwifi: move all uCode load variables Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 059/101] iwlwifi: move irq to PCIe Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 060/101] iwlwifi: move packet to transport Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 061/101] iwlwifi: virtualize nic_config Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 062/101] iwlwifi: remove priv from shared Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 063/101] iwlwifi: remove PA type configuration Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 064/101] iwlwifi: don't include iwl-prph.h everywhere Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 065/101] iwlwifi: clean up iwl-commands.h Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 066/101] iwlwifi: make iwl_fill_probe_req static Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 067/101] iwlwifi: remove unused arguments from iwlagn_gain_computation Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 068/101] iwlwifi: remove unused argument from rs_initialize_lq Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 069/101] iwlwifi: move iwl_sta_id_or_broadcast to user Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 070/101] iwlwifi: remove unused argument from iwl_init_hw_rates Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 071/101] iwlwifi: remove two unused arguments in testmode Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 072/101] iwlwifi: remove unused argument from iwlagn_suspend Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 073/101] iwlwifi: redesign PASSIVE_NO_RX workaround Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 074/101] iwlwifi: transport's tx_agg_disable must be atomic Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 075/101] iwlwifi: remove BT handlers from lib_ops Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 076/101] iwlwifi: move BT/HT params to shared Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 077/101] iwlwifi: make EEPROM enhanced TX power a bool Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 078/101] iwlwifi: remove unused max_nrg_cck from sensitivity and constify Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 079/101] iwlwifi: return error if loading uCode failed Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 080/101] iwlwifi: dump stack when fail to gain access to the device Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 081/101] iwlwifi: always check if got h/w access before write Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 082/101] iwlwifi: cleanup/fix memory barriers Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 083/101] iwlwifi: use writeb,writel,readl directly Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 084/101] iwlwifi: print DMA stop timeout error only if it happened Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 085/101] iwlwifi: reintroduce iwl_enable_rfkill_int Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 086/101] iwlwifi: add testmode command for rx forwarding Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 087/101] iwlwifi: fixed testmode notifications length Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 088/101] iwlwifi: add option to test MFP Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 089/101] iwlwifi: separate status to priv and trans Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 090/101] iwlwifi: make tx_cmd_pool kmem cache global Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 091/101] iwlwifi: log stop / wake queues Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 092/101] iwlwifi: configure transport layer from dvm op mode Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 093/101] iwlwifi: move setting up fw parameters Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 094/101] iwlwifi: more status bit factoring Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 095/101] iwlwifi: move command queue number out of the iwl_shared struct Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 096/101] iwlwifi: remove messages from queue wake/stop Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 097/101] iwlwifi: make iwl_init_context static Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 098/101] iwlwifi: restore PAN support Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 099/101] iwlwifi: don't delete AP station directly Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 100/101] iwlwifi: correct status bit refactoring errors Wey-Yi Guy
2012-03-04 19:29 ` [PATCH 101/101] iwlwifi: always monitor for stuck queues Wey-Yi Guy

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=1330889395-533-7-git-send-email-wey-yi.w.guy@intel.com \
    --to=wey-yi.w.guy@intel.com \
    --cc=johannes.berg@intel.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.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;
as well as URLs for NNTP newsgroup(s).