linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] iwlwifi fixes
@ 2012-05-10 16:05 Johannes Berg
  2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
                   ` (4 more replies)
  0 siblings, 5 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:05 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

John,

Here are a few fixes for iwlwifi. It's probably too late to get 
them into 3.4 but I split them out into their own series anyway.

This is my first ever submission as iwlwifi maintainer, so I
hope it works ok and doesn't get too many CCs :-)

johannes

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle
  2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
@ 2012-05-10 16:05 ` Johannes Berg
  2012-05-10 16:38   ` [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg Joe Perches
  2012-05-11 10:59   ` [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
  2012-05-10 16:05 ` [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings Johannes Berg
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:05 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Emmanuel Grumbach

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

The debug prints were wrong and buggy. The HW pointer wasn't printed
correctly, it was mixed up with the pointer to the rxbuf.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
index d7b5e66..9191143 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
@@ -499,7 +499,7 @@ static void iwl_rx_handle(struct iwl_trans *trans)
 
 	/* Rx interrupt, but nothing sent from uCode */
 	if (i == r)
-		IWL_DEBUG_RX(trans, "r = %d, i = %d\n", r, i);
+		IWL_DEBUG_RX(trans, "HW = SW = %d\n", r);
 
 	/* calculate total frames need to be restock after handling RX */
 	total_empty = r - rxq->write_actual;
@@ -515,7 +515,8 @@ static void iwl_rx_handle(struct iwl_trans *trans)
 		rxb = rxq->queue[i];
 		rxq->queue[i] = NULL;
 
-		IWL_DEBUG_RX(trans, "rxbuf: r = %d, i = %d (%p)\n", rxb);
+		IWL_DEBUG_RX(trans, "rxbuf: HW = %d, SW = %d (%p)\n",
+			     r, i, rxb);
 		iwl_rx_handle_rxbuf(trans, rxb);
 
 		i = (i + 1) & RX_QUEUE_MASK;
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings
  2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
  2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
@ 2012-05-10 16:05 ` Johannes Berg
  2012-05-11 12:50   ` [PATCH 2/4 v2] " Johannes Berg
  2012-05-16 15:16   ` [PATCH 2/4] " Johannes Berg
  2012-05-10 16:05 ` [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags Johannes Berg
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:05 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Emmanuel Grumbach, stable

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

The logic that allows to have a short TFD queue was completely wrong.
We do maintain 256 Transmit Frame Descriptors, but they point to
recycled buffers. We used to attach and de-attach different TFDs for
the same buffer and it worked since they pointed to the same buffer.

Also zero the number of BDs after unmapping a TFD. This seems not
necessary since we don't reclaim the same TFD twice, but I like
housekeeping.

This patch solves this warning:

[ 6427.079855] WARNING: at lib/dma-debug.c:866 check_unmap+0x727/0x7a0()
[ 6427.079859] Hardware name: Latitude E6410
[ 6427.079865] iwlwifi 0000:02:00.0: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x00000000296d393c] [size=8 bytes]
[ 6427.079870] Modules linked in: ...
[ 6427.079950] Pid: 6613, comm: ifconfig Tainted: G           O 3.3.3 #5
[ 6427.079954] Call Trace:
[ 6427.079963]  [<c10337a2>] warn_slowpath_common+0x72/0xa0
[ 6427.079982]  [<c1033873>] warn_slowpath_fmt+0x33/0x40
[ 6427.079988]  [<c12dcb77>] check_unmap+0x727/0x7a0
[ 6427.079995]  [<c12dcdaa>] debug_dma_unmap_page+0x5a/0x80
[ 6427.080024]  [<fe2312ac>] iwlagn_unmap_tfd+0x12c/0x180 [iwlwifi]
[ 6427.080048]  [<fe231349>] iwlagn_txq_free_tfd+0x49/0xb0 [iwlwifi]
[ 6427.080071]  [<fe228e37>] iwl_tx_queue_unmap+0x67/0x90 [iwlwifi]
[ 6427.080095]  [<fe22d221>] iwl_trans_pcie_stop_device+0x341/0x7b0 [iwlwifi]
[ 6427.080113]  [<fe204b0e>] iwl_down+0x17e/0x260 [iwlwifi]
[ 6427.080132]  [<fe20efec>] iwlagn_mac_stop+0x6c/0xf0 [iwlwifi]
[ 6427.080168]  [<fd8480ce>] ieee80211_stop_device+0x5e/0x190 [mac80211]
[ 6427.080198]  [<fd833208>] ieee80211_do_stop+0x288/0x620 [mac80211]
[ 6427.080243]  [<fd8335b7>] ieee80211_stop+0x17/0x20 [mac80211]
[ 6427.080250]  [<c148dac1>] __dev_close_many+0x81/0xd0
[ 6427.080270]  [<c148db3d>] __dev_close+0x2d/0x50
[ 6427.080276]  [<c148d152>] __dev_change_flags+0x82/0x150
[ 6427.080282]  [<c148e3e3>] dev_change_flags+0x23/0x60
[ 6427.080289]  [<c14f6320>] devinet_ioctl+0x6a0/0x770
[ 6427.080296]  [<c14f8705>] inet_ioctl+0x95/0xb0
[ 6427.080304]  [<c147a0f0>] sock_ioctl+0x70/0x270

Cc: stable@vger.kernel.org
Reported-by: Antonio Quartulli <ordex@autistici.org>
Tested-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h |    2 +-
 drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c  |   22 +++++++++++++--------
 drivers/net/wireless/iwlwifi/iwl-trans-pcie.c     |    4 +---
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
index 6213c05..e959207 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
@@ -347,7 +347,7 @@ void iwl_trans_tx_queue_set_status(struct iwl_trans *trans,
 void iwl_trans_pcie_tx_agg_setup(struct iwl_trans *trans, int queue, int fifo,
 				 int sta_id, int tid, int frame_limit, u16 ssn);
 void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
-	int index, enum dma_data_direction dma_dir);
+			 enum dma_data_direction dma_dir);
 int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
 			 struct sk_buff_head *skbs);
 int iwl_queue_space(const struct iwl_queue *q);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
index 21a8a67..a875023 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
@@ -204,33 +204,39 @@ static void iwlagn_unmap_tfd(struct iwl_trans *trans, struct iwl_cmd_meta *meta,
 	for (i = 1; i < num_tbs; i++)
 		dma_unmap_single(trans->dev, iwl_tfd_tb_get_addr(tfd, i),
 				iwl_tfd_tb_get_len(tfd, i), dma_dir);
+
+	tfd->num_tbs = 0;
 }
 
 /**
  * iwlagn_txq_free_tfd - Free all chunks referenced by TFD [txq->q.read_ptr]
  * @trans - transport private data
  * @txq - tx queue
- * @index - the index of the TFD to be freed
- *@dma_dir - the direction of the DMA mapping
+ * @dma_dir - the direction of the DMA mapping
  *
  * Does NOT advance any TFD circular buffer read/write indexes
  * Does NOT free the TFD itself (which is within circular buffer)
  */
 void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
-	int index, enum dma_data_direction dma_dir)
+			 enum dma_data_direction dma_dir)
 {
 	struct iwl_tfd *tfd_tmp = txq->tfds;
 
+	/* rd_ptr is bounded by n_bd and idx is bounded by n_window */
+	int rd_ptr = txq->q.read_ptr;
+	int idx = get_cmd_index(&txq->q, rd_ptr);
+
 	lockdep_assert_held(&txq->lock);
 
-	iwlagn_unmap_tfd(trans, &txq->entries[index].meta,
-			 &tfd_tmp[index], dma_dir);
+	/* We have only q->n_window txq->entries, but we use q->n_bd tfds */
+	iwlagn_unmap_tfd(trans, &txq->entries[idx].meta,
+			 &tfd_tmp[rd_ptr], dma_dir);
 
 	/* free SKB */
 	if (txq->entries) {
 		struct sk_buff *skb;
 
-		skb = txq->entries[index].skb;
+		skb = txq->entries[idx].skb;
 
 		/* Can be called from irqs-disabled context
 		 * If skb is not NULL, it means that the whole queue is being
@@ -238,7 +244,7 @@ void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
 		 */
 		if (skb) {
 			iwl_op_mode_free_skb(trans->op_mode, skb);
-			txq->entries[index].skb = NULL;
+			txq->entries[idx].skb = NULL;
 		}
 	}
 }
@@ -973,7 +979,7 @@ int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
 
 		iwlagn_txq_inval_byte_cnt_tbl(trans, txq);
 
-		iwlagn_txq_free_tfd(trans, txq, txq->q.read_ptr, DMA_TO_DEVICE);
+		iwlagn_txq_free_tfd(trans, txq, DMA_TO_DEVICE);
 		freed++;
 	}
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index b2f27ec..3cdc014 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -435,9 +435,7 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id)
 
 	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);
+		iwlagn_txq_free_tfd(trans, txq, dma_dir);
 		q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd);
 	}
 	spin_unlock_bh(&txq->lock);
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags
  2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
  2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
  2012-05-10 16:05 ` [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings Johannes Berg
@ 2012-05-10 16:05 ` Johannes Berg
  2012-05-11 16:52   ` Sedat Dilek
  2012-05-10 16:05 ` [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails Johannes Berg
  2012-05-16 17:05 ` [PATCH 0/4] iwlwifi fixes John W. Linville
  4 siblings, 1 reply; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:05 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Meenakshi Venkataraman

From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>

We missed passing an argument to the
debug print. Fix it.

Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn-sta.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
index 67e6f1d..76c1f72 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
@@ -236,6 +236,7 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv,
 	mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_SM_PS) >> 2;
 
 	IWL_DEBUG_INFO(priv, "STA %pM SM PS mode: %s\n",
+			sta->addr,
 			(mimo_ps_mode == WLAN_HT_CAP_SM_PS_STATIC) ?
 			"static" :
 			(mimo_ps_mode == WLAN_HT_CAP_SM_PS_DYNAMIC) ?
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails
  2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
                   ` (2 preceding siblings ...)
  2012-05-10 16:05 ` [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags Johannes Berg
@ 2012-05-10 16:05 ` Johannes Berg
  2012-05-11 16:53   ` Sedat Dilek
  2012-05-16 17:05 ` [PATCH 0/4] iwlwifi fixes John W. Linville
  4 siblings, 1 reply; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:05 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Meenakshi Venkataraman

From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>

When adding a station fails in
iwl_restore_stations, the driver treats it
like a successful station add and sends a
link quality command, when it it shouldn't.

This patch fixes one of the potential
sources for kernel warnings like this one:

WARNING: at drivers/net/wireless/iwlwifi/iwl-agn-sta.c:905 iwl_send_lq_cmd+0x130/0x217 [iwlwifi]()
Hardware name: 3323A2G
Modules linked in: ...
Pid: 17359, comm: kworker/u:2 Tainted: G           O 3.3.0-wl+ #1
Call Trace:
 [<ffffffff81039620>] warn_slowpath_common+0x7e/0x96
 [<ffffffff8103964d>] warn_slowpath_null+0x15/0x17
 [<ffffffffa02a9f0b>] iwl_send_lq_cmd+0x130/0x217 [iwlwifi]
 [<ffffffffa02aa1fb>] iwl_restore_stations+0x209/0x289 [iwlwifi]
 [<ffffffffa02b07c2>] iwlagn_commit_rxon+0x602/0x7bd [iwlwifi]
 [<ffffffffa02b111f>] iwlagn_bss_info_changed+0x247/0x31a [iwlwifi]
 [<ffffffffa0861437>] ieee80211_bss_info_change_notify+0x1a5/0x1ba [mac80211]
 [<ffffffffa088afad>] ieee80211_destroy_auth_data+0x4b/0x70 [mac80211]
 [<ffffffffa088df26>] ieee80211_sta_work+0xb5/0x954 [mac80211]

Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn-sta.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
index 76c1f72..ca9ac20 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
@@ -773,7 +773,7 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
 						~IWL_STA_DRIVER_ACTIVE;
 				priv->stations[i].used &=
 						~IWL_STA_UCODE_INPROGRESS;
-				spin_unlock_bh(&priv->sta_lock);
+				continue;
 			}
 			/*
 			 * Rate scaling has already been initialized, send
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
@ 2012-05-10 16:38   ` Joe Perches
  2012-05-10 16:50     ` Johannes Berg
  2012-05-11 10:59   ` [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
  1 sibling, 1 reply; 19+ messages in thread
From: Joe Perches @ 2012-05-10 16:38 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Emmanuel Grumbach

Add gcc format and argument printf checking
to reduce future defect introduction.

Signed-off-by: Joe Perches <joe@perches.com>
---
 drivers/net/wireless/iwlwifi/iwl-debug.h |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h
index 8376b84..d0c7c9e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debug.h
+++ b/drivers/net/wireless/iwlwifi/iwl-debug.h
@@ -50,10 +50,12 @@ void __iwl_crit(struct device *dev, const char *fmt, ...);
 #define IWL_CRIT(m, f, a...) __iwl_crit((m)->dev, f, ## a)
 
 #if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING)
+__printf(5, 6)
 void __iwl_dbg(struct device *dev,
 	       u32 level, bool limit, const char *function,
 	       const char *fmt, ...);
 #else
+__printf(5, 6)
 static inline void
 __iwl_dbg(struct device *dev,
 	  u32 level, bool limit, const char *function,





^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 16:38   ` [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg Joe Perches
@ 2012-05-10 16:50     ` Johannes Berg
  2012-05-10 16:56       ` Johannes Berg
  2012-05-10 17:34       ` Joe Perches
  0 siblings, 2 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:50 UTC (permalink / raw)
  To: Joe Perches; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Thu, 2012-05-10 at 09:38 -0700, Joe Perches wrote:
> Add gcc format and argument printf checking
> to reduce future defect introduction.

Good point, I'll pick this up.

> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>  drivers/net/wireless/iwlwifi/iwl-debug.h |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h
> index 8376b84..d0c7c9e 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-debug.h
> +++ b/drivers/net/wireless/iwlwifi/iwl-debug.h
> @@ -50,10 +50,12 @@ void __iwl_crit(struct device *dev, const char *fmt, ...);
>  #define IWL_CRIT(m, f, a...) __iwl_crit((m)->dev, f, ## a)
>  
>  #if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING)
> +__printf(5, 6)
>  void __iwl_dbg(struct device *dev,
>  	       u32 level, bool limit, const char *function,
>  	       const char *fmt, ...);

But that looks a bit odd to me? It would seem more natural to me to put
the attribute after the parameter list?

johannes


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 16:50     ` Johannes Berg
@ 2012-05-10 16:56       ` Johannes Berg
  2012-05-10 17:34       ` Joe Perches
  1 sibling, 0 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 16:56 UTC (permalink / raw)
  To: Joe Perches; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Thu, 2012-05-10 at 18:50 +0200, Johannes Berg wrote:
> On Thu, 2012-05-10 at 09:38 -0700, Joe Perches wrote:
> > Add gcc format and argument printf checking
> > to reduce future defect introduction.
> 
> Good point, I'll pick this up.

I'll also add it to the other functions __iwl_crit etc.

Thanks for the suggestion!

johannes


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 16:50     ` Johannes Berg
  2012-05-10 16:56       ` Johannes Berg
@ 2012-05-10 17:34       ` Joe Perches
  2012-05-10 17:40         ` Johannes Berg
  1 sibling, 1 reply; 19+ messages in thread
From: Joe Perches @ 2012-05-10 17:34 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Thu, 2012-05-10 at 18:50 +0200, Johannes Berg wrote:
> On Thu, 2012-05-10 at 09:38 -0700, Joe Perches wrote:
> > Add gcc format and argument printf checking
> > to reduce future defect introduction.
[]
> >  #if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING)
> > +__printf(5, 6)
> >  void __iwl_dbg(struct device *dev,
> >  	       u32 level, bool limit, const char *function,
> >  	       const char *fmt, ...);
> 
> But that looks a bit odd to me? It would seem more natural to me to put
> the attribute after the parameter list?

It's an attribute of the function and
this style is used almost everywhere
in the kernel.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 17:34       ` Joe Perches
@ 2012-05-10 17:40         ` Johannes Berg
  2012-05-10 18:01           ` Joe Perches
  0 siblings, 1 reply; 19+ messages in thread
From: Johannes Berg @ 2012-05-10 17:40 UTC (permalink / raw)
  To: Joe Perches; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Thu, 2012-05-10 at 10:34 -0700, Joe Perches wrote:
> On Thu, 2012-05-10 at 18:50 +0200, Johannes Berg wrote:
> > On Thu, 2012-05-10 at 09:38 -0700, Joe Perches wrote:
> > > Add gcc format and argument printf checking
> > > to reduce future defect introduction.
> []
> > >  #if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING)
> > > +__printf(5, 6)
> > >  void __iwl_dbg(struct device *dev,
> > >  	       u32 level, bool limit, const char *function,
> > >  	       const char *fmt, ...);
> > 
> > But that looks a bit odd to me? It would seem more natural to me to put
> > the attribute after the parameter list?
> 
> It's an attribute of the function and
> this style is used almost everywhere
> in the kernel.

I also found that for the inline, it *has* to be there. Checkpatch
doesn't like it though if I put it in the same line as "static inline
void" ;-)

johannes


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg
  2012-05-10 17:40         ` Johannes Berg
@ 2012-05-10 18:01           ` Joe Perches
  0 siblings, 0 replies; 19+ messages in thread
From: Joe Perches @ 2012-05-10 18:01 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Thu, 2012-05-10 at 19:40 +0200, Johannes Berg wrote:
> Checkpatch
> doesn't like it though if I put it in the same line as "static inline
> void" ;-)

checkpatch is both wise and stupid.



^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle
  2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
  2012-05-10 16:38   ` [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg Joe Perches
@ 2012-05-11 10:59   ` Johannes Berg
  2012-05-11 16:49     ` Sedat Dilek
  1 sibling, 1 reply; 19+ messages in thread
From: Johannes Berg @ 2012-05-11 10:59 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Emmanuel Grumbach

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    
The debug prints were wrong and buggy. The HW pointer wasn't printed
correctly, it was mixed up with the pointer to the rxbuf.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
v2: make patch apply -- looks like some whitespace diff to upstream
crept into our tree, thanks dileks.

--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
@@ -499,7 +499,7 @@ static void iwl_rx_handle(struct iwl_trans *trans)
 
 	/* Rx interrupt, but nothing sent from uCode */
 	if (i == r)
-		IWL_DEBUG_RX(trans, "r = %d, i = %d\n", r, i);
+		IWL_DEBUG_RX(trans, "HW = SW = %d\n", r);
 
 	/* calculate total frames need to be restock after handling RX */
 	total_empty = r - rxq->write_actual;
@@ -515,8 +515,8 @@ static void iwl_rx_handle(struct iwl_trans *trans)
 		rxb = rxq->queue[i];
 		rxq->queue[i] = NULL;
 
-		IWL_DEBUG_RX(trans, "rxbuf: r = %d, i = %d (%p)\n", rxb);
-
+		IWL_DEBUG_RX(trans, "rxbuf: HW = %d, SW = %d (%p)\n",
+			     r, i, rxb);
 		iwl_rx_handle_rxbuf(trans, rxb);
 
 		i = (i + 1) & RX_QUEUE_MASK;



^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 2/4 v2] iwlwifi: fix the Transmit Frame Descriptor rings
  2012-05-10 16:05 ` [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings Johannes Berg
@ 2012-05-11 12:50   ` Johannes Berg
  2012-05-11 16:50     ` Sedat Dilek
  2012-05-16 15:16   ` [PATCH 2/4] " Johannes Berg
  1 sibling, 1 reply; 19+ messages in thread
From: Johannes Berg @ 2012-05-11 12:50 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Emmanuel Grumbach

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

The logic that allows to have a short TFD queue was completely wrong.
We do maintain 256 Transmit Frame Descriptors, but they point to
recycled buffers. We used to attach and de-attach different TFDs for
the same buffer and it worked since they pointed to the same buffer.

Also zero the number of BDs after unmapping a TFD. This seems not
necessary since we don't reclaim the same TFD twice, but I like
housekeeping.

This patch solves this warning:

[ 6427.079855] WARNING: at lib/dma-debug.c:866 check_unmap+0x727/0x7a0()
[ 6427.079859] Hardware name: Latitude E6410
[ 6427.079865] iwlwifi 0000:02:00.0: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x00000000296d393c] [size=8 bytes]
[ 6427.079870] Modules linked in: ...
[ 6427.079950] Pid: 6613, comm: ifconfig Tainted: G           O 3.3.3 #5
[ 6427.079954] Call Trace:
[ 6427.079963]  [<c10337a2>] warn_slowpath_common+0x72/0xa0
[ 6427.079982]  [<c1033873>] warn_slowpath_fmt+0x33/0x40
[ 6427.079988]  [<c12dcb77>] check_unmap+0x727/0x7a0
[ 6427.079995]  [<c12dcdaa>] debug_dma_unmap_page+0x5a/0x80
[ 6427.080024]  [<fe2312ac>] iwlagn_unmap_tfd+0x12c/0x180 [iwlwifi]
[ 6427.080048]  [<fe231349>] iwlagn_txq_free_tfd+0x49/0xb0 [iwlwifi]
[ 6427.080071]  [<fe228e37>] iwl_tx_queue_unmap+0x67/0x90 [iwlwifi]
[ 6427.080095]  [<fe22d221>] iwl_trans_pcie_stop_device+0x341/0x7b0 [iwlwifi]
[ 6427.080113]  [<fe204b0e>] iwl_down+0x17e/0x260 [iwlwifi]
[ 6427.080132]  [<fe20efec>] iwlagn_mac_stop+0x6c/0xf0 [iwlwifi]
[ 6427.080168]  [<fd8480ce>] ieee80211_stop_device+0x5e/0x190 [mac80211]
[ 6427.080198]  [<fd833208>] ieee80211_do_stop+0x288/0x620 [mac80211]
[ 6427.080243]  [<fd8335b7>] ieee80211_stop+0x17/0x20 [mac80211]
[ 6427.080250]  [<c148dac1>] __dev_close_many+0x81/0xd0
[ 6427.080270]  [<c148db3d>] __dev_close+0x2d/0x50
[ 6427.080276]  [<c148d152>] __dev_change_flags+0x82/0x150
[ 6427.080282]  [<c148e3e3>] dev_change_flags+0x23/0x60
[ 6427.080289]  [<c14f6320>] devinet_ioctl+0x6a0/0x770
[ 6427.080296]  [<c14f8705>] inet_ioctl+0x95/0xb0
[ 6427.080304]  [<c147a0f0>] sock_ioctl+0x70/0x270

Cc: stable@vger.kernel.org
Reported-by: Antonio Quartulli <ordex@autistici.org>
Tested-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
v2: rebased onto wireless.git rather than wireless-testing.git, sorry!

diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
index 1c2fe87..3b844b7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
@@ -342,7 +342,7 @@ void iwl_trans_pcie_tx_agg_setup(struct iwl_trans *trans,
 				 enum iwl_rxon_context_id ctx,
 				 int sta_id, int tid, int frame_limit, u16 ssn);
 void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
-	int index, enum dma_data_direction dma_dir);
+			 enum dma_data_direction dma_dir);
 int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
 			 struct sk_buff_head *skbs);
 int iwl_queue_space(const struct iwl_queue *q);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
index e92972f..d7964b1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
@@ -237,32 +237,38 @@ static void iwlagn_unmap_tfd(struct iwl_trans *trans, struct iwl_cmd_meta *meta,
 	for (i = 1; i < num_tbs; i++)
 		dma_unmap_single(trans->dev, iwl_tfd_tb_get_addr(tfd, i),
 				iwl_tfd_tb_get_len(tfd, i), dma_dir);
+
+	tfd->num_tbs = 0;
 }
 
 /**
  * iwlagn_txq_free_tfd - Free all chunks referenced by TFD [txq->q.read_ptr]
  * @trans - transport private data
  * @txq - tx queue
- * @index - the index of the TFD to be freed
- *@dma_dir - the direction of the DMA mapping
+ * @dma_dir - the direction of the DMA mapping
  *
  * Does NOT advance any TFD circular buffer read/write indexes
  * Does NOT free the TFD itself (which is within circular buffer)
  */
 void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
-	int index, enum dma_data_direction dma_dir)
+			 enum dma_data_direction dma_dir)
 {
 	struct iwl_tfd *tfd_tmp = txq->tfds;
 
+	/* rd_ptr is bounded by n_bd and idx is bounded by n_window */
+	int rd_ptr = txq->q.read_ptr;
+	int idx = get_cmd_index(&txq->q, rd_ptr);
+
 	lockdep_assert_held(&txq->lock);
 
-	iwlagn_unmap_tfd(trans, &txq->meta[index], &tfd_tmp[index], dma_dir);
+	/* We have only q->n_window txq->entries, but we use q->n_bd tfds */
+	iwlagn_unmap_tfd(trans, &txq->meta[idx], &tfd_tmp[rd_ptr], dma_dir);
 
 	/* free SKB */
 	if (txq->skbs) {
 		struct sk_buff *skb;
 
-		skb = txq->skbs[index];
+		skb = txq->skbs[idx];
 
 		/* Can be called from irqs-disabled context
 		 * If skb is not NULL, it means that the whole queue is being
@@ -270,7 +276,7 @@ void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
 		 */
 		if (skb) {
 			iwl_op_mode_free_skb(trans->op_mode, skb);
-			txq->skbs[index] = NULL;
+			txq->skbs[idx] = NULL;
 		}
 	}
 }
@@ -1100,7 +1106,7 @@ int iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
 
 		iwlagn_txq_inval_byte_cnt_tbl(trans, txq);
 
-		iwlagn_txq_free_tfd(trans, txq, txq->q.read_ptr, DMA_TO_DEVICE);
+		iwlagn_txq_free_tfd(trans, txq, DMA_TO_DEVICE);
 		freed++;
 	}
 	return freed;
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index 4d7b30d..74b49ca 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -430,9 +430,7 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id)
 
 	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);
+		iwlagn_txq_free_tfd(trans, txq, dma_dir);
 		q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd);
 	}
 	spin_unlock_bh(&txq->lock);



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle
  2012-05-11 10:59   ` [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
@ 2012-05-11 16:49     ` Sedat Dilek
  0 siblings, 0 replies; 19+ messages in thread
From: Sedat Dilek @ 2012-05-11 16:49 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Fri, May 11, 2012 at 12:59 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
>
> The debug prints were wrong and buggy. The HW pointer wasn't printed
> correctly, it was mixed up with the pointer to the rxbuf.
>
> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> ---
> v2: make patch apply -- looks like some whitespace diff to upstream
> crept into our tree, thanks dileks.
>

Tested-by: Sedat Dilek <sedat.dilek@gmail.com>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/4 v2] iwlwifi: fix the Transmit Frame Descriptor rings
  2012-05-11 12:50   ` [PATCH 2/4 v2] " Johannes Berg
@ 2012-05-11 16:50     ` Sedat Dilek
  0 siblings, 0 replies; 19+ messages in thread
From: Sedat Dilek @ 2012-05-11 16:50 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Emmanuel Grumbach

On Fri, May 11, 2012 at 2:50 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
>
> The logic that allows to have a short TFD queue was completely wrong.
> We do maintain 256 Transmit Frame Descriptors, but they point to
> recycled buffers. We used to attach and de-attach different TFDs for
> the same buffer and it worked since they pointed to the same buffer.
>
> Also zero the number of BDs after unmapping a TFD. This seems not
> necessary since we don't reclaim the same TFD twice, but I like
> housekeeping.
>
> This patch solves this warning:
>
> [ 6427.079855] WARNING: at lib/dma-debug.c:866 check_unmap+0x727/0x7a0()
> [ 6427.079859] Hardware name: Latitude E6410
> [ 6427.079865] iwlwifi 0000:02:00.0: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x00000000296d393c] [size=8 bytes]
> [ 6427.079870] Modules linked in: ...
> [ 6427.079950] Pid: 6613, comm: ifconfig Tainted: G           O 3.3.3 #5
> [ 6427.079954] Call Trace:
> [ 6427.079963]  [<c10337a2>] warn_slowpath_common+0x72/0xa0
> [ 6427.079982]  [<c1033873>] warn_slowpath_fmt+0x33/0x40
> [ 6427.079988]  [<c12dcb77>] check_unmap+0x727/0x7a0
> [ 6427.079995]  [<c12dcdaa>] debug_dma_unmap_page+0x5a/0x80
> [ 6427.080024]  [<fe2312ac>] iwlagn_unmap_tfd+0x12c/0x180 [iwlwifi]
> [ 6427.080048]  [<fe231349>] iwlagn_txq_free_tfd+0x49/0xb0 [iwlwifi]
> [ 6427.080071]  [<fe228e37>] iwl_tx_queue_unmap+0x67/0x90 [iwlwifi]
> [ 6427.080095]  [<fe22d221>] iwl_trans_pcie_stop_device+0x341/0x7b0 [iwlwifi]
> [ 6427.080113]  [<fe204b0e>] iwl_down+0x17e/0x260 [iwlwifi]
> [ 6427.080132]  [<fe20efec>] iwlagn_mac_stop+0x6c/0xf0 [iwlwifi]
> [ 6427.080168]  [<fd8480ce>] ieee80211_stop_device+0x5e/0x190 [mac80211]
> [ 6427.080198]  [<fd833208>] ieee80211_do_stop+0x288/0x620 [mac80211]
> [ 6427.080243]  [<fd8335b7>] ieee80211_stop+0x17/0x20 [mac80211]
> [ 6427.080250]  [<c148dac1>] __dev_close_many+0x81/0xd0
> [ 6427.080270]  [<c148db3d>] __dev_close+0x2d/0x50
> [ 6427.080276]  [<c148d152>] __dev_change_flags+0x82/0x150
> [ 6427.080282]  [<c148e3e3>] dev_change_flags+0x23/0x60
> [ 6427.080289]  [<c14f6320>] devinet_ioctl+0x6a0/0x770
> [ 6427.080296]  [<c14f8705>] inet_ioctl+0x95/0xb0
> [ 6427.080304]  [<c147a0f0>] sock_ioctl+0x70/0x270
>
> Cc: stable@vger.kernel.org
> Reported-by: Antonio Quartulli <ordex@autistici.org>
> Tested-by: Antonio Quartulli <ordex@autistici.org>
> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> ---
> v2: rebased onto wireless.git rather than wireless-testing.git, sorry!
>

Tested-by: Sedat Dilek <sedat.dilek@gmail.com>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags
  2012-05-10 16:05 ` [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags Johannes Berg
@ 2012-05-11 16:52   ` Sedat Dilek
  0 siblings, 0 replies; 19+ messages in thread
From: Sedat Dilek @ 2012-05-11 16:52 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Meenakshi Venkataraman

On Thu, May 10, 2012 at 6:05 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
>
> We missed passing an argument to the
> debug print. Fix it.
>
> Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
> Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
>

Tested-by: Sedat Dilek <sedat.dilek@gmail.com>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails
  2012-05-10 16:05 ` [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails Johannes Berg
@ 2012-05-11 16:53   ` Sedat Dilek
  0 siblings, 0 replies; 19+ messages in thread
From: Sedat Dilek @ 2012-05-11 16:53 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linville, linux-wireless, Meenakshi Venkataraman

On Thu, May 10, 2012 at 6:05 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
>
> When adding a station fails in
> iwl_restore_stations, the driver treats it
> like a successful station add and sends a
> link quality command, when it it shouldn't.
>
> This patch fixes one of the potential
> sources for kernel warnings like this one:
>
> WARNING: at drivers/net/wireless/iwlwifi/iwl-agn-sta.c:905 iwl_send_lq_cmd+0x130/0x217 [iwlwifi]()
> Hardware name: 3323A2G
> Modules linked in: ...
> Pid: 17359, comm: kworker/u:2 Tainted: G           O 3.3.0-wl+ #1
> Call Trace:
>  [<ffffffff81039620>] warn_slowpath_common+0x7e/0x96
>  [<ffffffff8103964d>] warn_slowpath_null+0x15/0x17
>  [<ffffffffa02a9f0b>] iwl_send_lq_cmd+0x130/0x217 [iwlwifi]
>  [<ffffffffa02aa1fb>] iwl_restore_stations+0x209/0x289 [iwlwifi]
>  [<ffffffffa02b07c2>] iwlagn_commit_rxon+0x602/0x7bd [iwlwifi]
>  [<ffffffffa02b111f>] iwlagn_bss_info_changed+0x247/0x31a [iwlwifi]
>  [<ffffffffa0861437>] ieee80211_bss_info_change_notify+0x1a5/0x1ba [mac80211]
>  [<ffffffffa088afad>] ieee80211_destroy_auth_data+0x4b/0x70 [mac80211]
>  [<ffffffffa088df26>] ieee80211_sta_work+0xb5/0x954 [mac80211]
>
> Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
> Reviewed-by: Wey-Yi W Guy <wey-yi.w.guy@intel.com>
> Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
>

Tested-by: Sedat Dilek <sedat.dilek@gmail.com>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings
  2012-05-10 16:05 ` [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings Johannes Berg
  2012-05-11 12:50   ` [PATCH 2/4 v2] " Johannes Berg
@ 2012-05-16 15:16   ` Johannes Berg
  1 sibling, 0 replies; 19+ messages in thread
From: Johannes Berg @ 2012-05-16 15:16 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Emmanuel Grumbach, stable

John,

> The logic that allows to have a short TFD queue was completely wrong.
> We do maintain 256 Transmit Frame Descriptors, but they point to
> recycled buffers. We used to attach and de-attach different TFDs for
> the same buffer and it worked since they pointed to the same buffer.
> 
> Also zero the number of BDs after unmapping a TFD. This seems not
> necessary since we don't reclaim the same TFD twice, but I like
> housekeeping.

> Cc: stable@vger.kernel.org

This is Cc stable, can we also get it to 3.4 still? If not I guess Greg
will pick it up

johannes


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 0/4] iwlwifi fixes
  2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
                   ` (3 preceding siblings ...)
  2012-05-10 16:05 ` [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails Johannes Berg
@ 2012-05-16 17:05 ` John W. Linville
  4 siblings, 0 replies; 19+ messages in thread
From: John W. Linville @ 2012-05-16 17:05 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

On Thu, May 10, 2012 at 06:05:48PM +0200, Johannes Berg wrote:
> John,
> 
> Here are a few fixes for iwlwifi. It's probably too late to get 
> them into 3.4 but I split them out into their own series anyway.
> 
> This is my first ever submission as iwlwifi maintainer, so I
> hope it works ok and doesn't get too many CCs :-)
> 
> johannes

I didn't think they were suitable for post-rc7.  I tried to apply
them to wireless-next, but they required more rework than I thought
I should be trusted to give them. :-)

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2012-05-16 17:17 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-10 16:05 [PATCH 0/4] iwlwifi fixes Johannes Berg
2012-05-10 16:05 ` [PATCH 1/4] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
2012-05-10 16:38   ` [PATCH 1/4] iwlwifi: Add __printf argument checking to __iwl_dbg Joe Perches
2012-05-10 16:50     ` Johannes Berg
2012-05-10 16:56       ` Johannes Berg
2012-05-10 17:34       ` Joe Perches
2012-05-10 17:40         ` Johannes Berg
2012-05-10 18:01           ` Joe Perches
2012-05-11 10:59   ` [PATCH 1/4 v2] iwlwifi: fix prints in iwl_rx_handle Johannes Berg
2012-05-11 16:49     ` Sedat Dilek
2012-05-10 16:05 ` [PATCH 2/4] iwlwifi: fix the Transmit Frame Descriptor rings Johannes Berg
2012-05-11 12:50   ` [PATCH 2/4 v2] " Johannes Berg
2012-05-11 16:50     ` Sedat Dilek
2012-05-16 15:16   ` [PATCH 2/4] " Johannes Berg
2012-05-10 16:05 ` [PATCH 3/4] iwlwifi: fix debug print in iwl_sta_calc_ht_flags Johannes Berg
2012-05-11 16:52   ` Sedat Dilek
2012-05-10 16:05 ` [PATCH 4/4] iwlwifi: do not send lq cmd when station add fails Johannes Berg
2012-05-11 16:53   ` Sedat Dilek
2012-05-16 17:05 ` [PATCH 0/4] iwlwifi fixes John W. Linville

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).