[PATCH] iwlagn: fix time interval misuse in iwl_poll_{direct_}bit

Huaxu Wan huaxu.wan at linux.intel.com
Wed Feb 25 02:30:04 UTC 2009


>From 0d735a601a3e3544138d26346037ef17a6374ce6 Mon Sep 17 00:00:00 2001
From: Huaxu Wan <huaxu.wan at intel.com>
Date: Tue, 24 Feb 2009 16:55:15 +0800
Subject: [PATCH] iwlagn: fix time interval misuse in iwl_poll_{direct_}bit

    Original Author: Zhu, Yi <yi.zhu at intel.com>
    http://marc.info/?l=linux-wireless&m=122849275528102&w=2
    
    iwlwifi: fix time interval misuse in iwl_poll_{direct_}bit
    
    The patch fixes the misuse of microsecond with millisecond in the
    polling mechanism of the iwlwifi driver. The impact of this problem
    is the unacceptable latency for the whole system (especially during
    bringing down the wlan interface).
    
    Signed-off-by: Huaxu Wan <huaxu.wan at intel.com>

---
 drivers/net/wireless/iwlwifi/iwl-3945-io.h |    4 ++--
 drivers/net/wireless/iwlwifi/iwl-io.h      |    4 ++--
 drivers/net/wireless/iwlwifi/iwl-tx.c      |    2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-io.h b/drivers/net/wireless/iwlwifi/iwl-3945-io.h
index b3fe48d..d1a9f7c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-io.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-io.h
@@ -93,7 +93,7 @@ static inline int _iwl3945_poll_bit(struct iwl3945_priv *priv, u32 addr,
 	do {
 		if ((_iwl3945_read32(priv, addr) & mask) == (bits & mask))
 			return i;
-		mdelay(10);
+		udelay(10);
 		i += 10;
 	} while (i < timeout);
 
@@ -276,7 +276,7 @@ static inline int _iwl3945_poll_direct_bit(struct iwl3945_priv *priv,
 	do {
 		if ((_iwl3945_read_direct32(priv, addr) & mask) == mask)
 			return i;
-		mdelay(10);
+		udelay(10);
 		i += 10;
 	} while (i < timeout);
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-io.h b/drivers/net/wireless/iwlwifi/iwl-io.h
index 9740fcc..0314999 100644
--- a/drivers/net/wireless/iwlwifi/iwl-io.h
+++ b/drivers/net/wireless/iwlwifi/iwl-io.h
@@ -95,7 +95,7 @@ static inline int _iwl_poll_bit(struct iwl_priv *priv, u32 addr,
 	do {
 		if ((_iwl_read32(priv, addr) & mask) == (bits & mask))
 			return i;
-		mdelay(10);
+		udelay(10);
 		i += 10;
 	} while (i < timeout);
 
@@ -277,7 +277,7 @@ static inline int _iwl_poll_direct_bit(struct iwl_priv *priv,
 	do {
 		if ((_iwl_read_direct32(priv, addr) & mask) == mask)
 			return i;
-		mdelay(10);
+		udelay(10);
 		i += 10;
 	} while (i < timeout);
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 907a53e..9e435bc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -567,7 +567,7 @@ void iwl_txq_ctx_stop(struct iwl_priv *priv)
 				   FH_TCSR_CHNL_TX_CONFIG_REG(txq_id), 0x0);
 		iwl_poll_direct_bit(priv, FH_TSSR_TX_STATUS_REG,
 				    FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE
-				    (txq_id), 200);
+				    (txq_id), 1000);
 	}
 	iwl_release_nic_access(priv);
 	spin_unlock_irqrestore(&priv->lock, flags);
-- 
1.6.0.4
rdner <tim.gardner at canonical.com>




More information about the kernel-team mailing list