diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-27 17:36:10 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-27 17:36:10 +0800 |
commit | 731b282bf141c664f745cdc0f84f6cbf89ee1830 (patch) | |
tree | 6906b2068a52122f6361c091bb6352044fdda217 | |
parent | a274dac2a3ab9e8947832aac5f79c12c50b48381 (diff) | |
download | stable-queue-731b282bf141c664f745cdc0f84f6cbf89ee1830.tar.gz |
.38 patches
8 files changed, 394 insertions, 0 deletions
diff --git a/queue-2.6.38/ath9k_hw-do-noise-floor-calibration-only-on-required-chains.patch b/queue-2.6.38/ath9k_hw-do-noise-floor-calibration-only-on-required-chains.patch new file mode 100644 index 0000000000..2d48e13e46 --- /dev/null +++ b/queue-2.6.38/ath9k_hw-do-noise-floor-calibration-only-on-required-chains.patch @@ -0,0 +1,83 @@ +From 28ef6450f0182f95c4f50aaa0ab2043a09c72b0a Mon Sep 17 00:00:00 2001 +From: Rajkumar Manoharan <rmanoharan@atheros.com> +Date: Wed, 4 May 2011 19:37:17 +0530 +Subject: ath9k_hw: do noise floor calibration only on required chains + +From: Rajkumar Manoharan <rmanoharan@atheros.com> + +commit 28ef6450f0182f95c4f50aaa0ab2043a09c72b0a upstream. + +At present the noise floor calibration is processed in supported +control and extension chains rather than required chains. +Unnccesarily doing nfcal in all supported chains leads to +invalid nf readings on extn chains and these invalid values +got updated into history buffer. While loading those values +from history buffer is moving the chip to deaf state. + +This issue was observed in AR9002/AR9003 chips while doing +associate/dissociate in HT40 mode and interface up/down +in iterative manner. After some iterations, the chip was moved +to deaf state. Somehow the pci devices are recovered by poll work +after chip reset. Raading the nf values in all supported extension chains +when the hw is not yet configured in HT40 mode results invalid values. + +Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com> +Signed-off-by: John W. Linville <linville@tuxdriver.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/net/wireless/ath/ath9k/calib.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +--- a/drivers/net/wireless/ath/ath9k/calib.c ++++ b/drivers/net/wireless/ath/ath9k/calib.c +@@ -69,15 +69,21 @@ static void ath9k_hw_update_nfcal_hist_b + int16_t *nfarray) + { + struct ath_common *common = ath9k_hw_common(ah); ++ struct ieee80211_conf *conf = &common->hw->conf; + struct ath_nf_limits *limit; + struct ath9k_nfcal_hist *h; + bool high_nf_mid = false; ++ u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; + int i; + + h = cal->nfCalHist; + limit = ath9k_hw_get_nf_limits(ah, ah->curchan); + + for (i = 0; i < NUM_NF_READINGS; i++) { ++ if (!(chainmask & (1 << i)) || ++ ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf))) ++ continue; ++ + h[i].nfCalBuffer[h[i].currIndex] = nfarray[i]; + + if (++h[i].currIndex >= ATH9K_NF_CAL_HIST_MAX) +@@ -225,6 +231,7 @@ void ath9k_hw_loadnf(struct ath_hw *ah, + int32_t val; + u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; + struct ath_common *common = ath9k_hw_common(ah); ++ struct ieee80211_conf *conf = &common->hw->conf; + s16 default_nf = ath9k_hw_get_default_nf(ah, chan); + + if (ah->caldata) +@@ -234,6 +241,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, + if (chainmask & (1 << i)) { + s16 nfval; + ++ if ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf)) ++ continue; ++ + if (h) + nfval = h[i].privNF; + else +@@ -293,6 +303,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, + ENABLE_REGWRITE_BUFFER(ah); + for (i = 0; i < NUM_NF_READINGS; i++) { + if (chainmask & (1 << i)) { ++ if ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf)) ++ continue; ++ + val = REG_READ(ah, ah->nf_regs[i]); + val &= 0xFFFFFE00; + val |= (((u32) (-50) << 1) & 0x1ff); diff --git a/queue-2.6.38/ath9k_hw-fix-dual-band-assumption-for-xb113.patch b/queue-2.6.38/ath9k_hw-fix-dual-band-assumption-for-xb113.patch new file mode 100644 index 0000000000..c78d20b5a7 --- /dev/null +++ b/queue-2.6.38/ath9k_hw-fix-dual-band-assumption-for-xb113.patch @@ -0,0 +1,39 @@ +From 9ba7f4f5eba5f4b44c7796bbad29f8ec3a7d5864 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez <lrodriguez@atheros.com> +Date: Wed, 11 May 2011 14:57:26 -0700 +Subject: ath9k_hw: fix dual band assumption for XB113 + +From: Luis R. Rodriguez <lrodriguez@atheros.com> + +commit 9ba7f4f5eba5f4b44c7796bbad29f8ec3a7d5864 upstream. + +The XB113 cards are single band, 5 GHz-only, but the +default settings were configured to assume it was dual +band. Users of these cards then would see 2.4 GHz channels +but you would never get any scan results from these channels +given that the radio is not present. + +Cc: Fiona Cain <Fiona.Cain@atheros.com> +Cc: Ray Li <ray.li@greenwavereality.com> +Cc: Kathy Giori <kathy.giori@atheros.com> +Cc: Aeolus Yang <aeolus.yang@atheros.com> +Cc: Dan Friedman <dan.friedman@atheros.com> +Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> +Signed-off-by: John W. Linville <linville@tuxdriver.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +@@ -652,7 +652,7 @@ static const struct ar9300_eeprom ar9300 + .regDmn = { LE16(0), LE16(0x1f) }, + .txrxMask = 0x77, /* 4 bits tx and 4 bits rx */ + .opCapFlags = { +- .opFlags = AR5416_OPFLAGS_11G | AR5416_OPFLAGS_11A, ++ .opFlags = AR5416_OPFLAGS_11A, + .eepMisc = 0, + }, + .rfSilent = 0, diff --git a/queue-2.6.38/ath9k_hw-fix-power-for-the-ht40-duplicate-frames.patch b/queue-2.6.38/ath9k_hw-fix-power-for-the-ht40-duplicate-frames.patch new file mode 100644 index 0000000000..6e962cfc79 --- /dev/null +++ b/queue-2.6.38/ath9k_hw-fix-power-for-the-ht40-duplicate-frames.patch @@ -0,0 +1,53 @@ +From cf3a03b9c99a0b2715741d116f50f513f545bb2d Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez <lrodriguez@atheros.com> +Date: Wed, 4 May 2011 14:01:26 -0700 +Subject: ath9k_hw: fix power for the HT40 duplicate frames + +From: Luis R. Rodriguez <lrodriguez@atheros.com> + +commit cf3a03b9c99a0b2715741d116f50f513f545bb2d upstream. + +With AR9003 at about ~ 10 feet from an AP that uses RTS / CTS you +will be able to associate but not not get data through given that +the power for the rates used was set too low. This increases the +power and permits data connectivity at longer distances from +access points when connected with HT40. Without this you will not +get any data through when associated to APs configured in HT40 +at about more than 10 feet away. + +Cc: Fiona Cain <fcain@atheros.com> +Cc: Zhen Xie <Zhen.Xie@Atheros.com> +Cc: Kathy Giori <kathy.giori@atheros.com> +Cc: Neha Choksi <neha.choksi@atheros.com> +Cc: Wayne Daniel <wayne.daniel@atheros.com> +Cc: Gaurav Jauhar <gaurav.jauhar@atheros.com> +Cc: Samira Naraghi <samira.naraghi@atheros.com> +CC: Ashok Chennupati <ashok.chennupati@atheros.com> +Cc: Lance Zimmerman <lance.zimmerman@atheros.com> +Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> +Signed-off-by: John W. Linville <linville@tuxdriver.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +@@ -3994,6 +3994,16 @@ static int ar9003_hw_tx_power_regwrite(s + POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0) + ); + ++ /* Write the power for duplicated frames - HT40 */ ++ ++ /* dup40_cck (LSB), dup40_ofdm, ext20_cck, ext20_ofdm (MSB) */ ++ REG_WRITE(ah, 0xa3e0, ++ POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 24) | ++ POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 16) | ++ POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 8) | ++ POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0) ++ ); ++ + /* Write the HT20 power per rate set */ + + /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */ diff --git a/queue-2.6.38/ath9k_hw-fix-sta-connection-issues-with-ar9380-xb113.patch b/queue-2.6.38/ath9k_hw-fix-sta-connection-issues-with-ar9380-xb113.patch new file mode 100644 index 0000000000..55de17655b --- /dev/null +++ b/queue-2.6.38/ath9k_hw-fix-sta-connection-issues-with-ar9380-xb113.patch @@ -0,0 +1,35 @@ +From be0e6aa5a0c487a2a0880dda8bc70f7f1860fc39 Mon Sep 17 00:00:00 2001 +From: Senthil Balasubramanian <senthilkumar@atheros.com> +Date: Thu, 12 May 2011 16:24:28 +0530 +Subject: ath9k_hw: Fix STA connection issues with AR9380 (XB113). + +From: Senthil Balasubramanian <senthilkumar@atheros.com> + +commit be0e6aa5a0c487a2a0880dda8bc70f7f1860fc39 upstream. + +XB113 (AR9380) 3x3 SB 5G only cards were failing to connect to APs +due to incorrect xpabiaslevel configuration. fix it. + +Cc: Ray Li <ray.li@greenwavereality.com> +Cc: Kathy Giori <kathy.giori@atheros.com> +Cc: Aeolus Yang <aeolus.yang@atheros.com> +Cc: compat@orbit-lab.org +Signed-off-by: Senthil Balasubramanian <senthilkumar@atheros.com> +Signed-off-by: John W. Linville <linville@tuxdriver.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +@@ -922,7 +922,7 @@ static const struct ar9300_eeprom ar9300 + .db_stage2 = {3, 3, 3}, /* 3 chain */ + .db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */ + .db_stage4 = {3, 3, 3}, /* don't exist for 2G */ +- .xpaBiasLvl = 0, ++ .xpaBiasLvl = 0xf, + .txFrameToDataStart = 0x0e, + .txFrameToPaOn = 0x0e, + .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */ diff --git a/queue-2.6.38/iwlagn-fix-iwl_is_any_associated.patch b/queue-2.6.38/iwlagn-fix-iwl_is_any_associated.patch new file mode 100644 index 0000000000..048002ecf9 --- /dev/null +++ b/queue-2.6.38/iwlagn-fix-iwl_is_any_associated.patch @@ -0,0 +1,68 @@ +From 054ec924944912413e4ee927b8cf02f476d08783 Mon Sep 17 00:00:00 2001 +From: Johannes Berg <johannes.berg@intel.com> +Date: Fri, 6 May 2011 11:11:20 -0700 +Subject: iwlagn: fix iwl_is_any_associated + +From: Johannes Berg <johannes.berg@intel.com> + +commit 054ec924944912413e4ee927b8cf02f476d08783 upstream. + +The function iwl_is_any_associated() was intended +to check both contexts, but due to an oversight +it only checks the BSS context. This leads to a +problem with scanning since the passive dwell +time isn't restricted appropriately and a scan +that includes passive channels will never finish +if only the PAN context is associated since the +default dwell time of 120ms won't fit into the +normal 100 TU DTIM interval. + +Fix the function by using for_each_context() and +also reorganise the other functions a bit to take +advantage of each other making the code easier to +read. + +Signed-off-by: Johannes Berg <johannes.berg@intel.com> +Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> +Signed-off-by: John W. Linville <linville@tuxdriver.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/net/wireless/iwlwifi/iwl-dev.h | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +--- a/drivers/net/wireless/iwlwifi/iwl-dev.h ++++ b/drivers/net/wireless/iwlwifi/iwl-dev.h +@@ -1604,21 +1604,24 @@ iwl_rxon_ctx_from_vif(struct ieee80211_v + ctx < &priv->contexts[NUM_IWL_RXON_CTX]; ctx++) \ + if (priv->valid_contexts & BIT(ctx->ctxid)) + +-static inline int iwl_is_associated(struct iwl_priv *priv, +- enum iwl_rxon_context_id ctxid) ++static inline int iwl_is_associated_ctx(struct iwl_rxon_context *ctx) + { +- return (priv->contexts[ctxid].active.filter_flags & +- RXON_FILTER_ASSOC_MSK) ? 1 : 0; ++ return (ctx->active.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0; + } + +-static inline int iwl_is_any_associated(struct iwl_priv *priv) ++static inline int iwl_is_associated(struct iwl_priv *priv, ++ enum iwl_rxon_context_id ctxid) + { +- return iwl_is_associated(priv, IWL_RXON_CTX_BSS); ++ return iwl_is_associated_ctx(&priv->contexts[ctxid]); + } + +-static inline int iwl_is_associated_ctx(struct iwl_rxon_context *ctx) ++static inline int iwl_is_any_associated(struct iwl_priv *priv) + { +- return (ctx->active.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0; ++ struct iwl_rxon_context *ctx; ++ for_each_context(priv, ctx) ++ if (iwl_is_associated_ctx(ctx)) ++ return true; ++ return false; + } + + static inline int is_channel_valid(const struct iwl_channel_info *ch_info) diff --git a/queue-2.6.38/powerpc-oprofile-handle-events-that-raise-an-exception-without-overflowing.patch b/queue-2.6.38/powerpc-oprofile-handle-events-that-raise-an-exception-without-overflowing.patch new file mode 100644 index 0000000000..31bfd8d1f8 --- /dev/null +++ b/queue-2.6.38/powerpc-oprofile-handle-events-that-raise-an-exception-without-overflowing.patch @@ -0,0 +1,66 @@ +From ad5d5292f16c6c1d7d3e257c4c7407594286b97e Mon Sep 17 00:00:00 2001 +From: Eric B Munson <emunson@mgebm.net> +Date: Mon, 23 May 2011 04:22:40 +0000 +Subject: powerpc/oprofile: Handle events that raise an exception without overflowing + +From: Eric B Munson <emunson@mgebm.net> + +commit ad5d5292f16c6c1d7d3e257c4c7407594286b97e upstream. + +Commit 0837e3242c73566fc1c0196b4ec61779c25ffc93 fixes a situation on POWER7 +where events can roll back if a specualtive event doesn't actually complete. +This can raise a performance monitor exception. We need to catch this to ensure +that we reset the PMC. In all cases the PMC will be less than 256 cycles from +overflow. + +This patch lifts Anton's fix for the problem in perf and applies it to oprofile +as well. + +Signed-off-by: Eric B Munson <emunson@mgebm.net> +Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/powerpc/oprofile/op_model_power4.c | 24 +++++++++++++++++++++++- + 1 file changed, 23 insertions(+), 1 deletion(-) + +--- a/arch/powerpc/oprofile/op_model_power4.c ++++ b/arch/powerpc/oprofile/op_model_power4.c +@@ -261,6 +261,28 @@ static int get_kernel(unsigned long pc, + return is_kernel; + } + ++static bool pmc_overflow(unsigned long val) ++{ ++ if ((int)val < 0) ++ return true; ++ ++ /* ++ * Events on POWER7 can roll back if a speculative event doesn't ++ * eventually complete. Unfortunately in some rare cases they will ++ * raise a performance monitor exception. We need to catch this to ++ * ensure we reset the PMC. In all cases the PMC will be 256 or less ++ * cycles from overflow. ++ * ++ * We only do this if the first pass fails to find any overflowing ++ * PMCs because a user might set a period of less than 256 and we ++ * don't want to mistakenly reset them. ++ */ ++ if (__is_processor(PV_POWER7) && ((0x80000000 - val) <= 256)) ++ return true; ++ ++ return false; ++} ++ + static void power4_handle_interrupt(struct pt_regs *regs, + struct op_counter_config *ctr) + { +@@ -281,7 +303,7 @@ static void power4_handle_interrupt(stru + + for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { + val = classic_ctr_read(i); +- if (val < 0) { ++ if (pmc_overflow(val)) { + if (oprofile_running && ctr[i].enabled) { + oprofile_add_ext_sample(pc, regs, i, is_kernel); + classic_ctr_write(i, reset_value[i]); diff --git a/queue-2.6.38/powerpc-set-nr_cpu_ids-early-and-use-it-to-free-pacas.patch b/queue-2.6.38/powerpc-set-nr_cpu_ids-early-and-use-it-to-free-pacas.patch new file mode 100644 index 0000000000..43ebdff4fa --- /dev/null +++ b/queue-2.6.38/powerpc-set-nr_cpu_ids-early-and-use-it-to-free-pacas.patch @@ -0,0 +1,43 @@ +From c1854e00727f50f7ac99e98d26ece04c087ef785 Mon Sep 17 00:00:00 2001 +From: Ryan Grimm <grimm@us.ibm.com> +Date: Thu, 31 Mar 2011 19:33:02 +0000 +Subject: powerpc: Set nr_cpu_ids early and use it to free PACAs + +From: Ryan Grimm <grimm@us.ibm.com> + +commit c1854e00727f50f7ac99e98d26ece04c087ef785 upstream. + +Without this, "holes" in the CPU numbering can cause us to +free too many PACAs + +Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/powerpc/kernel/paca.c | 2 +- + arch/powerpc/kernel/setup-common.c | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +--- a/arch/powerpc/kernel/paca.c ++++ b/arch/powerpc/kernel/paca.c +@@ -203,7 +203,7 @@ void __init free_unused_pacas(void) + { + int new_size; + +- new_size = PAGE_ALIGN(sizeof(struct paca_struct) * num_possible_cpus()); ++ new_size = PAGE_ALIGN(sizeof(struct paca_struct) * nr_cpu_ids); + + if (new_size >= paca_size) + return; +--- a/arch/powerpc/kernel/setup-common.c ++++ b/arch/powerpc/kernel/setup-common.c +@@ -509,6 +509,9 @@ void __init smp_setup_cpu_maps(void) + */ + cpu_init_thread_core_maps(nthreads); + ++ /* Now that possible cpus are set, set nr_cpu_ids for later use */ ++ nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1; ++ + free_unused_pacas(); + } + #endif /* CONFIG_SMP */ diff --git a/queue-2.6.38/series b/queue-2.6.38/series index 6701e6d0bb..c5f63841b7 100644 --- a/queue-2.6.38/series +++ b/queue-2.6.38/series @@ -11,3 +11,10 @@ qla2xxx-fix-vport-delete-hang-when-logins-are-outstanding.patch powerpc-kdump64-don-t-reference-freed-memory-as-pacas.patch powerpc-kexec-fix-memory-corruption-from-unallocated-slaves.patch x86-cpufeature-fix-cpuid-leaf-7-feature-detection.patch +ath9k_hw-do-noise-floor-calibration-only-on-required-chains.patch +ath9k_hw-fix-power-for-the-ht40-duplicate-frames.patch +ath9k_hw-fix-dual-band-assumption-for-xb113.patch +ath9k_hw-fix-sta-connection-issues-with-ar9380-xb113.patch +powerpc-set-nr_cpu_ids-early-and-use-it-to-free-pacas.patch +powerpc-oprofile-handle-events-that-raise-an-exception-without-overflowing.patch +iwlagn-fix-iwl_is_any_associated.patch |