* [PATCH 0/8] iwlwifi driver 12/17 updates @ 2008-12-17 8:52 Zhu Yi 2008-12-17 8:52 ` [PATCH 1/8] iwlwifi: cleanup iwl-dev.h Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Zhu Yi Hi John, These are mostly cleanup except for patch 7 is targeted to address a memory allocation problem in heavy rx. [PATCH 1/8] iwlwifi: cleanup iwl-dev.h [PATCH 2/8] iwlwifi: add line feed to printk [PATCH 3/8] iwlwifi: update comments on the debug interface [PATCH 4/8] iwlwifi: use type uint for module param debug [PATCH 5/8] iwlwifi: remove useless goto [PATCH 6/8] iwlwifi: use meaningful vars in _iwl_poll_bit() [PATCH 7/8] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory [PATCH 8/8] iwlwifi: indicate txpower is off in sysfs Thanks, -yi ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/8] iwlwifi: cleanup iwl-dev.h 2008-12-17 8:52 [PATCH 0/8] iwlwifi driver 12/17 updates Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 2/8] iwlwifi: add line feed to printk Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi From: Winkler, Tomas <tomas.winkler@intel.com> The patch removes unused definition and moves code to proper places. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-3945.h | 6 ----- drivers/net/wireless/iwlwifi/iwl-calib.c | 9 ++++++++ drivers/net/wireless/iwlwifi/iwl-commands.h | 2 + drivers/net/wireless/iwlwifi/iwl-dev.h | 29 ++------------------------ 4 files changed, 14 insertions(+), 32 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h index ec6084c..85d9a51 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945.h @@ -405,12 +405,6 @@ struct iwl3945_rx_queue { #define SCAN_INTERVAL 100 -#define MAX_A_CHANNELS 252 -#define MIN_A_CHANNELS 7 - -#define MAX_B_CHANNELS 14 -#define MIN_B_CHANNELS 1 - #define STATUS_HCMD_ACTIVE 0 /* host command in progress */ #define STATUS_HCMD_SYNC_ACTIVE 1 /* sync host command in progress */ #define STATUS_INT_ENABLED 2 diff --git a/drivers/net/wireless/iwlwifi/iwl-calib.c b/drivers/net/wireless/iwlwifi/iwl-calib.c index 7956e08..f836ecc 100644 --- a/drivers/net/wireless/iwlwifi/iwl-calib.c +++ b/drivers/net/wireless/iwlwifi/iwl-calib.c @@ -70,6 +70,15 @@ * INIT calibrations framework *****************************************************************************/ +struct statistics_general_data { + u32 beacon_silence_rssi_a; + u32 beacon_silence_rssi_b; + u32 beacon_silence_rssi_c; + u32 beacon_energy_a; + u32 beacon_energy_b; + u32 beacon_energy_c; +}; + int iwl_send_calib_results(struct iwl_priv *priv) { int ret = 0; diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 60e79d9..52966ff 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h @@ -2418,6 +2418,8 @@ struct statistics_rx_ht_phy { __le32 reserved2; } __attribute__ ((packed)); +#define INTERFERENCE_DATA_AVAILABLE __constant_cpu_to_le32(1) + struct statistics_rx_non_phy { __le32 bogus_cts; /* CTS received when not expecting CTS */ __le32 bogus_ack; /* ACK received when not expecting ACK */ diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index eaf0c9c..0468fcc 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h @@ -323,14 +323,6 @@ struct iwl_rx_queue { #define IWL_SUPPORTED_RATES_IE_LEN 8 -#define SCAN_INTERVAL 100 - -#define MAX_A_CHANNELS 252 -#define MIN_A_CHANNELS 7 - -#define MAX_B_CHANNELS 14 -#define MIN_B_CHANNELS 1 - #define MAX_TID_COUNT 9 #define IWL_INVALID_RATE 0xFF @@ -496,8 +488,6 @@ struct iwl_sensitivity_ranges { }; -#define IWL_FAT_CHANNEL_52 BIT(IEEE80211_BAND_5GHZ) - #define KELVIN_TO_CELSIUS(x) ((x)-273) #define CELSIUS_TO_KELVIN(x) ((x)+273) @@ -546,9 +536,6 @@ struct iwl_hw_params { const struct iwl_sensitivity_ranges *sens; }; -#define HT_SHORT_GI_20MHZ (1 << 0) -#define HT_SHORT_GI_40MHZ (1 << 1) - /****************************************************************************** * @@ -590,15 +577,15 @@ static inline u8 get_cmd_index(struct iwl_queue *q, u32 index, int is_huge) } -struct iwl_priv; - - struct iwl_dma_ptr { dma_addr_t dma; void *addr; size_t size; }; +#define HT_SHORT_GI_20MHZ (1 << 0) +#define HT_SHORT_GI_40MHZ (1 << 1) + #define IWL_CHANNEL_WIDTH_20MHZ 0 #define IWL_CHANNEL_WIDTH_40MHZ 1 @@ -613,7 +600,6 @@ struct iwl_dma_ptr { #define TX_POWER_IWL_ILLEGAL_VOLTAGE -10000 /* Sensitivity and chain noise calibration */ -#define INTERFERENCE_DATA_AVAILABLE __constant_cpu_to_le32(1) #define INITIALIZATION_VALUE 0xFFFF #define CAL_NUM_OF_BEACONS 20 #define MAXIMUM_ALLOWED_PATHLOSS 15 @@ -666,15 +652,6 @@ enum iwl4965_calib_enabled_state { IWL_CALIB_ENABLED = 1, }; -struct statistics_general_data { - u32 beacon_silence_rssi_a; - u32 beacon_silence_rssi_b; - u32 beacon_silence_rssi_c; - u32 beacon_energy_a; - u32 beacon_energy_b; - u32 beacon_energy_c; -}; - /* * enum iwl_calib -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/8] iwlwifi: add line feed to printk 2008-12-17 8:52 ` [PATCH 1/8] iwlwifi: cleanup iwl-dev.h Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Wu, Fengguang, Zhu Yi From: Wu, Fengguang <fengguang.wu@intel.com> This adds line feed to printk. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-led.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-led.c b/drivers/net/wireless/iwlwifi/iwl-led.c index dce32ff..11eccd7 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-led.c @@ -292,7 +292,7 @@ static int iwl_get_blink_rate(struct iwl_priv *priv) if (tpt > (blink_tbl[i].tpt * IWL_1MB_RATE)) break; - IWL_DEBUG_LED("LED BLINK IDX=%d", i); + IWL_DEBUG_LED("LED BLINK IDX=%d\n", i); return i; } -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/8] iwlwifi: update comments on the debug interface 2008-12-17 8:52 ` [PATCH 2/8] iwlwifi: add line feed to printk Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 4/8] iwlwifi: use type uint for module param debug Zhu Yi 2008-12-17 10:53 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Wu Fengguang 0 siblings, 2 replies; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Wu, Fengguang, Zhu Yi From: Wu, Fengguang <fengguang.wu@intel.com> Bring up-to-date some comments on the location of debug files. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Acked-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-agn.c | 2 +- drivers/net/wireless/iwlwifi/iwl-debug.h | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 9d50fad..d0fb7a3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -3354,7 +3354,7 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) /* * The following adds a new attribute to the sysfs representation - * of this device driver (i.e. a new file in /sys/bus/pci/drivers/iwl/) + * of this device driver (i.e. a new file in /sys/class/net/wlan0/device/) * used for controlling the debug level. * * See the level definitions in iwl for details. diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h index e4c264b..56c13b4 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debug.h +++ b/drivers/net/wireless/iwlwifi/iwl-debug.h @@ -96,28 +96,25 @@ static inline void iwl_dbgfs_unregister(struct iwl_priv *priv) #endif /* CONFIG_IWLWIFI_DEBUGFS */ /* - * To use the debug system; + * To use the debug system: * * If you are defining a new debug classification, simply add it to the #define - * list here in the form of: + * list here in the form of * * #define IWL_DL_xxxx VALUE * - * shifting value to the left one bit from the previous entry. xxxx should be - * the name of the classification (for example, WEP) + * where xxxx should be the name of the classification (for example, WEP). * * You then need to either add a IWL_xxxx_DEBUG() macro definition for your * classification, or use IWL_DEBUG(IWL_DL_xxxx, ...) whenever you want * to send output to that classification. * - * To add your debug level to the list of levels seen when you perform + * The active debug levels can be accessed via files * - * % cat /sys/class/net/wlanX/device/debug_level + * /sys/module/iwlagn/parameters/debug{50} + * /sys/class/net/wlan0/device/debug_level * - * you simply need to add your entry to the iwl_debug_levels array. - * - * If you do not see debug_level in /sys/class/net/wlanX/device/debug_level - * then you do not have CONFIG_IWLWIFI_DEBUG defined in your kernel config file + * when CONFIG_IWLWIFI_DEBUG=y. */ #define IWL_DL_INFO (1 << 0) -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/8] iwlwifi: use type uint for module param debug 2008-12-17 8:52 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 5/8] iwlwifi: remove useless goto Zhu Yi 2008-12-17 10:53 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Wu Fengguang 1 sibling, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Wu, Fengguang, Zhu Yi From: Wu, Fengguang <fengguang.wu@intel.com> This enables one to change the debug level at bit 31. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-4965.c | 2 +- drivers/net/wireless/iwlwifi/iwl-5000.c | 2 +- drivers/net/wireless/iwlwifi/iwl-core.h | 2 +- drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index a7e6e32..3a78d86 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c @@ -2354,7 +2354,7 @@ module_param_named(disable, iwl4965_mod_params.disable, int, 0444); MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])"); module_param_named(swcrypto, iwl4965_mod_params.sw_crypto, int, 0444); MODULE_PARM_DESC(swcrypto, "using crypto in software (default 0 [hardware])"); -module_param_named(debug, iwl4965_mod_params.debug, int, 0444); +module_param_named(debug, iwl4965_mod_params.debug, uint, 0444); MODULE_PARM_DESC(debug, "debug output mask"); module_param_named( disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444); diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 2344de9..7f3a921 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -1623,7 +1623,7 @@ MODULE_PARM_DESC(disable50, module_param_named(swcrypto50, iwl50_mod_params.sw_crypto, bool, 0444); MODULE_PARM_DESC(swcrypto50, "using software crypto engine (default 0 [hardware])\n"); -module_param_named(debug50, iwl50_mod_params.debug, int, 0444); +module_param_named(debug50, iwl50_mod_params.debug, uint, 0444); MODULE_PARM_DESC(debug50, "50XX debug output mask"); module_param_named(queues_num50, iwl50_mod_params.num_of_queues, int, 0444); MODULE_PARM_DESC(queues_num50, "number of hw queues in 50xx series"); diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 08b842f..7c3a20a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h @@ -154,7 +154,7 @@ struct iwl_ops { struct iwl_mod_params { int disable; /* def: 0 = enable radio */ int sw_crypto; /* def: 0 = using hardware encryption */ - int debug; /* def: 0 = minimal debug log messages */ + u32 debug; /* def: 0 = minimal debug log messages */ int disable_hw_scan; /* def: 0 = use h/w scan */ int num_of_queues; /* def: HW dependent */ int num_of_ampdu_queues;/* def: HW dependent */ diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 161d812..dad8e6d 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c @@ -65,7 +65,7 @@ static int iwl3945_tx_queue_update_write_ptr(struct iwl3945_priv *priv, /* module parameters */ static int iwl3945_param_disable_hw_scan; /* def: 0 = use 3945's h/w scan */ -static int iwl3945_param_debug; /* def: 0 = minimal debug log messages */ +static u32 iwl3945_param_debug; /* def: 0 = minimal debug log messages */ static int iwl3945_param_disable; /* def: 0 = enable radio */ static int iwl3945_param_antenna; /* def: 0 = both antennas (use diversity) */ int iwl3945_param_hwcrypto; /* def: 0 = use software encryption */ @@ -8361,7 +8361,7 @@ MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])"); module_param_named(hwcrypto, iwl3945_param_hwcrypto, int, 0444); MODULE_PARM_DESC(hwcrypto, "using hardware crypto engine (default 0 [software])\n"); -module_param_named(debug, iwl3945_param_debug, int, 0444); +module_param_named(debug, iwl3945_param_debug, uint, 0444); MODULE_PARM_DESC(debug, "debug output mask"); module_param_named(disable_hw_scan, iwl3945_param_disable_hw_scan, int, 0444); MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)"); -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/8] iwlwifi: remove useless goto 2008-12-17 8:52 ` [PATCH 4/8] iwlwifi: use type uint for module param debug Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 6/8] iwlwifi: use meaningful vars in _iwl_poll_bit() Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Wu Fengguang, Zhu Yi From: Wu Fengguang <fengguang.wu@intel.com> The patch removes some useless goto in code cleanup. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-4965.c | 8 ++------ drivers/net/wireless/iwlwifi/iwl-5000.c | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index 3a78d86..5a72bc0 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c @@ -426,7 +426,6 @@ static void iwl4965_nic_config(struct iwl_priv *priv) static int iwl4965_apm_stop_master(struct iwl_priv *priv) { - int ret = 0; unsigned long flags; spin_lock_irqsave(&priv->lock, flags); @@ -434,16 +433,13 @@ static int iwl4965_apm_stop_master(struct iwl_priv *priv) /* set stop master bit */ iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_STOP_MASTER); - ret = iwl_poll_direct_bit(priv, CSR_RESET, + iwl_poll_direct_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_MASTER_DISABLED, 100); - if (ret < 0) - goto out; -out: spin_unlock_irqrestore(&priv->lock, flags); IWL_DEBUG_INFO("stop master\n"); - return ret; + return 0; } static void iwl4965_apm_stop(struct iwl_priv *priv) diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 7f3a921..66d053d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -73,7 +73,6 @@ static const u16 iwl5000_default_queue_to_tx_fifo[] = { /* FIXME: same implementation as 4965 */ static int iwl5000_apm_stop_master(struct iwl_priv *priv) { - int ret = 0; unsigned long flags; spin_lock_irqsave(&priv->lock, flags); @@ -81,16 +80,13 @@ static int iwl5000_apm_stop_master(struct iwl_priv *priv) /* set stop master bit */ iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_STOP_MASTER); - ret = iwl_poll_direct_bit(priv, CSR_RESET, + iwl_poll_direct_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_MASTER_DISABLED, 100); - if (ret < 0) - goto out; -out: spin_unlock_irqrestore(&priv->lock, flags); IWL_DEBUG_INFO("stop master\n"); - return ret; + return 0; } -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/8] iwlwifi: use meaningful vars in _iwl_poll_bit() 2008-12-17 8:52 ` [PATCH 5/8] iwlwifi: remove useless goto Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 7/8] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Wu, Fengguang, Zhu Yi From: Wu, Fengguang <fengguang.wu@intel.com> Rename vars in _iwl_poll_bit() to better reflect the truth. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-io.h | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-io.h b/drivers/net/wireless/iwlwifi/iwl-io.h index 998ac19..0a92e74 100644 --- a/drivers/net/wireless/iwlwifi/iwl-io.h +++ b/drivers/net/wireless/iwlwifi/iwl-io.h @@ -87,17 +87,18 @@ static inline u32 __iwl_read32(char *f, u32 l, struct iwl_priv *priv, u32 ofs) #define iwl_read32(p, o) _iwl_read32(p, o) #endif +#define IWL_POLL_INTERVAL 10 /* microseconds */ static inline int _iwl_poll_bit(struct iwl_priv *priv, u32 addr, u32 bits, u32 mask, int timeout) { - int i = 0; + int t = 0; do { if ((_iwl_read32(priv, addr) & mask) == (bits & mask)) - return i; - udelay(10); - i += 10; - } while (i < timeout); + return t; + udelay(IWL_POLL_INTERVAL); + t += IWL_POLL_INTERVAL; + } while (t < timeout); return -ETIMEDOUT; } -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 7/8] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory 2008-12-17 8:52 ` [PATCH 6/8] iwlwifi: use meaningful vars in _iwl_poll_bit() Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 2008-12-17 8:52 ` [PATCH 8/8] iwlwifi: indicate txpower is off in sysfs Zhu Yi 0 siblings, 1 reply; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Zhu Yi Previously we allocate Rx SKB with GFP_ATOMIC flag. This is because we need to hold a spinlock to protect the two rx_used and rx_free lists operation in the rxq. spin_lock(); ... element = rxq->rx_used.next; element->skb = alloc_skb(..., GFP_ATOMIC); list_del(element); list_add_tail(&element->list, &rxq->rx_free); ... spin_unlock(); After spliting the rx_used delete and rx_free insert into two operations, we don't require the skb allocation in an atomic context any more (the function itself is scheduled in a workqueue). spin_lock(); ... element = rxq->rx_used.next; list_del(element); ... spin_unlock(); ... element->skb = alloc_skb(..., GFP_KERNEL); ... spin_lock() ... list_add_tail(&element->list, &rxq->rx_free); ... spin_unlock(); This patch should fix the "iwlagn: Can not allocate SKB buffers" warning we see recently. Signed-off-by: Zhu Yi <yi.zhu@intel.com> Acked-by: Tomas Winkler <tomas.winkler@intel.com> --- drivers/net/wireless/iwlwifi/iwl-agn.c | 12 +----------- drivers/net/wireless/iwlwifi/iwl-rx.c | 29 +++++++++++++++++++---------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index d0fb7a3..8102815 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -1112,16 +1112,6 @@ static void iwl_setup_rx_handlers(struct iwl_priv *priv) priv->cfg->ops->lib->rx_handler_setup(priv); } -/* - * this should be called while priv->lock is locked -*/ -static void __iwl_rx_replenish(struct iwl_priv *priv) -{ - iwl_rx_allocate(priv); - iwl_rx_queue_restock(priv); -} - - /** * iwl_rx_handle - Main entry function for receiving responses from uCode * @@ -1230,7 +1220,7 @@ void iwl_rx_handle(struct iwl_priv *priv) count++; if (count >= 8) { priv->rxq.read = i; - __iwl_rx_replenish(priv); + iwl_rx_queue_restock(priv); count = 0; } } diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index 919a775..c5f1aa0 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c @@ -244,25 +244,31 @@ void iwl_rx_allocate(struct iwl_priv *priv) struct list_head *element; struct iwl_rx_mem_buffer *rxb; unsigned long flags; - spin_lock_irqsave(&rxq->lock, flags); - while (!list_empty(&rxq->rx_used)) { + + while (1) { + spin_lock_irqsave(&rxq->lock, flags); + + if (list_empty(&rxq->rx_used)) { + spin_unlock_irqrestore(&rxq->lock, flags); + return; + } element = rxq->rx_used.next; rxb = list_entry(element, struct iwl_rx_mem_buffer, list); + list_del(element); + + spin_unlock_irqrestore(&rxq->lock, flags); /* Alloc a new receive buffer */ rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256, - __GFP_NOWARN | GFP_ATOMIC); + GFP_KERNEL); if (!rxb->skb) { - if (net_ratelimit()) - printk(KERN_CRIT DRV_NAME - ": Can not allocate SKB buffers\n"); + printk(KERN_CRIT DRV_NAME + "Can not allocate SKB buffers\n"); /* We don't reschedule replenish work here -- we will * call the restock method and if it still needs * more buffers it will schedule replenish */ break; } - priv->alloc_rxb_skb++; - list_del(element); /* Get physical address of RB/SKB */ rxb->real_dma_addr = pci_map_single( @@ -276,12 +282,15 @@ void iwl_rx_allocate(struct iwl_priv *priv) rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256); skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr); + spin_lock_irqsave(&rxq->lock, flags); + list_add_tail(&rxb->list, &rxq->rx_free); rxq->free_count++; + priv->alloc_rxb_skb++; + + spin_unlock_irqrestore(&rxq->lock, flags); } - spin_unlock_irqrestore(&rxq->lock, flags); } -EXPORT_SYMBOL(iwl_rx_allocate); void iwl_rx_replenish(struct iwl_priv *priv) { -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 8/8] iwlwifi: indicate txpower is off in sysfs 2008-12-17 8:52 ` [PATCH 7/8] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory Zhu Yi @ 2008-12-17 8:52 ` Zhu Yi 0 siblings, 0 replies; 10+ messages in thread From: Zhu Yi @ 2008-12-17 8:52 UTC (permalink / raw) To: linville; +Cc: linux-wireless, ipw3945-devel, Jay Sternberg, Zhu Yi From: Jay Sternberg <jay.e.sternberg@linux.intel.com> The patch checks if the radio is disabled before displaying the tx power level. Previously when the txpower was set off show_tx_power still returned the prior power level. Now it will indicate the power has been turned off. Signed-off-by: Jay Sternberg <jay.e.sternberg@linux.intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> --- drivers/net/wireless/iwlwifi/iwl-agn.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 8102815..b6c74a1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -3430,7 +3430,11 @@ static ssize_t show_tx_power(struct device *d, struct device_attribute *attr, char *buf) { struct iwl_priv *priv = (struct iwl_priv *)d->driver_data; - return sprintf(buf, "%d\n", priv->tx_power_user_lmt); + + if (!iwl_is_ready_rf(priv)) + return sprintf(buf, "off\n"); + else + return sprintf(buf, "%d\n", priv->tx_power_user_lmt); } static ssize_t store_tx_power(struct device *d, -- 1.5.3.6 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/8] iwlwifi: update comments on the debug interface 2008-12-17 8:52 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Zhu Yi 2008-12-17 8:52 ` [PATCH 4/8] iwlwifi: use type uint for module param debug Zhu Yi @ 2008-12-17 10:53 ` Wu Fengguang 1 sibling, 0 replies; 10+ messages in thread From: Wu Fengguang @ 2008-12-17 10:53 UTC (permalink / raw) To: Zhu, Yi Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org, ipw3945-devel@lists.sourceforge.net On Wed, Dec 17, 2008 at 10:52:29AM +0200, Zhu, Yi wrote: > From: Wu, Fengguang <fengguang.wu@intel.com> > > Bring up-to-date some comments on the location of debug files. > > Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> > Acked-by: Tomas Winkler <tomas.winkler@intel.com> > Signed-off-by: Zhu Yi <yi.zhu@intel.com> > --- > drivers/net/wireless/iwlwifi/iwl-agn.c | 2 +- > drivers/net/wireless/iwlwifi/iwl-debug.h | 17 +++++++---------- > 2 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c > index 9d50fad..d0fb7a3 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-agn.c > +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c > @@ -3354,7 +3354,7 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) > > /* > * The following adds a new attribute to the sysfs representation > - * of this device driver (i.e. a new file in /sys/bus/pci/drivers/iwl/) > + * of this device driver (i.e. a new file in /sys/class/net/wlan0/device/) > * used for controlling the debug level. > * > * See the level definitions in iwl for details. > diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h > index e4c264b..56c13b4 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-debug.h > +++ b/drivers/net/wireless/iwlwifi/iwl-debug.h > @@ -96,28 +96,25 @@ static inline void iwl_dbgfs_unregister(struct iwl_priv *priv) > #endif /* CONFIG_IWLWIFI_DEBUGFS */ > > /* > - * To use the debug system; > + * To use the debug system: > * > * If you are defining a new debug classification, simply add it to the #define > - * list here in the form of: > + * list here in the form of > * > * #define IWL_DL_xxxx VALUE > * > - * shifting value to the left one bit from the previous entry. xxxx should be > - * the name of the classification (for example, WEP) > + * where xxxx should be the name of the classification (for example, WEP). > * > * You then need to either add a IWL_xxxx_DEBUG() macro definition for your > * classification, or use IWL_DEBUG(IWL_DL_xxxx, ...) whenever you want > * to send output to that classification. > * > - * To add your debug level to the list of levels seen when you perform > + * The active debug levels can be accessed via files > * > - * % cat /sys/class/net/wlanX/device/debug_level > + * /sys/module/iwlagn/parameters/debug{50} > + * /sys/class/net/wlan0/device/debug_level > * > - * you simply need to add your entry to the iwl_debug_levels array. > - * > - * If you do not see debug_level in /sys/class/net/wlanX/device/debug_level > - * then you do not have CONFIG_IWLWIFI_DEBUG defined in your kernel config file > + * when CONFIG_IWLWIFI_DEBUG=y. > */ Hi Yi, This was my prepared version: * The debug levels can be activated by the "debug" module parameter("debug50" * for 5000), and be runtime accessed via file * * /sys/class/net/wlan0/device/debug_level * * when CONFIG_IWLWIFI_DEBUG=y. It's not really an obviously better writing though, and can be safely ignored. Thanks, Fengguang ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-12-17 10:54 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-12-17 8:52 [PATCH 0/8] iwlwifi driver 12/17 updates Zhu Yi 2008-12-17 8:52 ` [PATCH 1/8] iwlwifi: cleanup iwl-dev.h Zhu Yi 2008-12-17 8:52 ` [PATCH 2/8] iwlwifi: add line feed to printk Zhu Yi 2008-12-17 8:52 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Zhu Yi 2008-12-17 8:52 ` [PATCH 4/8] iwlwifi: use type uint for module param debug Zhu Yi 2008-12-17 8:52 ` [PATCH 5/8] iwlwifi: remove useless goto Zhu Yi 2008-12-17 8:52 ` [PATCH 6/8] iwlwifi: use meaningful vars in _iwl_poll_bit() Zhu Yi 2008-12-17 8:52 ` [PATCH 7/8] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory Zhu Yi 2008-12-17 8:52 ` [PATCH 8/8] iwlwifi: indicate txpower is off in sysfs Zhu Yi 2008-12-17 10:53 ` [PATCH 3/8] iwlwifi: update comments on the debug interface Wu Fengguang
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).