linux/drivers/cpufreq
Viresh Kumar e128c86407 cpufreq: ondemand: Update sampling rate only for concerned policies
We are comparing policy->governor against cpufreq_gov_ondemand to make
sure that we update sampling rate only for the concerned CPUs. But that
isn't enough.

In case of governor_per_policy, there can be multiple instances of
ondemand governor and we will always end up updating all of them with
current code. What we rather need to do, is to compare dbs_data with
poilcy->governor_data, which will match only for the policies governed
by dbs_data.

This code is also racy as the governor might be getting stopped at that
time and we may end up scheduling work for a policy, which we have just
disabled.

Fix that by protecting the entire function with &od_dbs_cdata.mutex,
which will prevent against races with policy START/STOP/etc.

After these locks are in place, we can safely get the policy via per-cpu
dbs_info.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2015-12-07 02:20:10 +01:00
..
acpi-cpufreq.c cpufreq: acpi_cpufreq: prevent crash on reading freqdomain_cpus 2015-10-08 21:47:13 +02:00
amd_freq_sensitivity.c cpufreq: AMD "frequency sensitivity feedback" powersave bias for ondemand governor 2013-04-10 13:19:26 +02:00
arm_big_little_dt.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
arm_big_little.c cpufreq: arm_big_little: fix frequency check when bL switcher is active 2015-11-02 01:58:27 +01:00
arm_big_little.h PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
at32ap-cpufreq.c cpufreq: at32ap: don't declare local variable as static 2014-04-07 14:31:33 +02:00
blackfin-cpufreq.c cpufreq: Remove cpufreq_generic_exit() 2014-03-12 01:06:00 +01:00
cppc_cpufreq.c cpufreq: CPPC: Initialize and check CPUFreq CPU co-ord type correctly 2015-11-23 22:21:18 +01:00
cpufreq_conservative.c cpufreq: conservative: remove 'enable' field 2015-09-26 02:59:38 +02:00
cpufreq_governor.c cpufreq: governor: Quit work-handlers early if governor is stopped 2015-11-02 02:07:11 +01:00
cpufreq_governor.h cpufreq: conservative: remove 'enable' field 2015-09-26 02:59:38 +02:00
cpufreq_ondemand.c cpufreq: ondemand: Update sampling rate only for concerned policies 2015-12-07 02:20:10 +01:00
cpufreq_performance.c cpufreq: Clean up header files included in the core 2013-08-07 23:34:09 +02:00
cpufreq_powersave.c cpufreq: Clean up header files included in the core 2013-08-07 23:34:09 +02:00
cpufreq_stats.c cpufreq: stats: drop unnecessary locking 2015-01-23 23:06:45 +01:00
cpufreq_userspace.c cpufreq / governor: Remove fossil comment 2013-10-17 23:00:20 +02:00
cpufreq-dt.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
cpufreq-nforce2.c cpufreq: nforce2: Fix typo in comment to function nforce2_init() 2015-06-15 15:45:24 +02:00
cpufreq.c cpufreq: use last policy after online for drivers with ->setpolicy 2015-12-02 23:50:33 +01:00
cris-artpec3-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
cris-etraxfs-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
davinci-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
dbx500-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
e_powersaver.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
elanfreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
exynos5440-cpufreq.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
freq_table.c cpufreq: Allow drivers to enable boost support after registering driver 2015-08-07 03:25:23 +02:00
gx-suspmod.c cpufreq: gx-suspmod: Fix two typos in two comments 2015-06-15 15:46:15 +02:00
highbank-cpufreq.c Merge branch 'mailbox-for-linus' of git://git.linaro.org/landing-teams/working/fujitsu/integration 2014-10-21 11:21:19 -07:00
hisi-acpu-cpufreq.c cpufreq: hisilicon: add acpu driver 2015-04-02 02:24:54 +02:00
ia64-acpi-cpufreq.c cpufreq: ia64: Fix a memory leak in acpi_cpufreq_cpu_exit() 2015-07-22 22:27:40 +02:00
imx6q-cpufreq.c Merge branch 'pm-opp' 2015-11-02 00:54:37 +01:00
integrator-cpufreq.c cpufreq: integrator: Fix module autoload for OF platform driver 2015-09-25 23:29:35 +02:00
intel_pstate.c intel_pstate: Fix "performance" mode behavior with HWP enabled 2015-11-25 23:37:44 +01:00
Kconfig cpufreq: qoriq: rename the driver 2015-03-18 22:35:16 +01:00
Kconfig.arm cpufreq: SCPI: Depend on SCPI clk driver 2015-11-23 23:50:27 +01:00
Kconfig.powerpc cpufreq: qoriq: rename the driver 2015-03-18 22:35:16 +01:00
Kconfig.x86 Revert "cpufreq: intel_pstate: Use ACPI perf configuration" 2015-11-19 00:20:42 +01:00
kirkwood-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
longhaul.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
longhaul.h cpufreq: delete __cpuinit usage from all cpufreq files 2013-07-14 19:36:57 -04:00
longrun.c cpufreq: add new routine cpufreq_verify_within_cpu_limits() 2013-10-16 00:50:23 +02:00
loongson2_cpufreq.c CPUFREQ: Loongson2: Fix broken build due to incorrect include. 2015-08-03 09:24:59 +02:00
ls1x-cpufreq.c MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
Makefile ARM: SoC driver updates for v4.4 2015-11-10 15:00:03 -08:00
maple-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
mt8173-cpufreq.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
omap-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
p4-clockmod.c p4-clockmod: Replace cpu_sibling_mask() with topology_sibling_cpumask() 2015-05-27 15:22:16 +02:00
pasemi-cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
pcc-cpufreq.c cpufreq: pcc: Enable autoload of pcc-cpufreq for ACPI processors 2014-11-14 00:16:25 +01:00
pmac32-cpufreq.c powerpc: Remove powerpc specific cmd_line 2014-10-02 17:33:55 +10:00
pmac64-cpufreq.c of: Migrate of_find_node_by_name() users to for_each_node_by_name() 2014-06-26 17:12:24 +01:00
powernow-k6.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
powernow-k7.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
powernow-k7.h
powernow-k8.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
powernow-k8.h cpufreq: powernow-k8: Suppress checkpatch warnings 2014-05-17 01:27:01 +02:00
powernv-cpufreq.c cpufreq : powernv: Report Pmax throttling if capped below nominal frequency 2015-09-26 03:03:06 +02:00
ppc_cbe_cpufreq_pervasive.c cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:26 +02:00
ppc_cbe_cpufreq_pmi.c cpufreq: remove redundant CPUFREQ_INCOMPATIBLE notifier event 2015-09-01 15:50:38 +02:00
ppc_cbe_cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
ppc_cbe_cpufreq.h cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:26 +02:00
pxa2xx-cpufreq.c cpufreq: pxa: make pxa_freqs arrays const 2015-05-05 00:49:38 +02:00
pxa3xx-cpufreq.c cpufreq: Remove cpufreq_generic_exit() 2014-03-12 01:06:00 +01:00
qoriq-cpufreq.c cpufreq: qoriq: optimize the CPU frequency switching time 2015-06-15 15:47:28 +02:00
s3c24xx-cpufreq-debugfs.c cpufreq: s3c24xx: move cpufreq driver to drivers/cpufreq 2013-05-20 23:04:28 +09:00
s3c24xx-cpufreq.c cpufreq: s3c: remove last use of resume_clocks callback 2015-02-19 06:36:53 +01:00
s3c64xx-cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
s3c2410-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s3c2412-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s3c2416-cpufreq.c cpufreq: s3c: remove incorrect __init annotations 2015-02-19 06:36:53 +01:00
s3c2440-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s5pv210-cpufreq.c cpufreq: s5pv210-cpufreq: fix wrong do_div() usage 2015-11-05 22:50:48 +01:00
sa1100-cpufreq.c cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag 2014-01-06 14:17:25 +01:00
sa1110-cpufreq.c cpufreq: sa1110: set memory type for h3600 2014-07-16 14:30:17 +02:00
sc520_freq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
scpi-cpufreq.c cpufreq: arm_big_little: add SCPI interface driver 2015-09-28 11:53:38 +01:00
sfi-cpufreq.c cpufreq: sfi: use kmemdup rather than duplicating its implementation 2015-09-01 15:51:15 +02:00
sh-cpufreq.c cpufreq: Convert existing drivers to use cpufreq_freq_transition_{begin|end} 2014-03-26 16:41:41 +01:00
sparc-us2e-cpufreq.c cpufreq: add 'freq_table' in struct cpufreq_policy 2014-03-12 01:06:00 +01:00
sparc-us3-cpufreq.c cpufreq: add 'freq_table' in struct cpufreq_policy 2014-03-12 01:06:00 +01:00
spear-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
speedstep-centrino.c cpufreq: Make linux-pm@vger.kernel.org official mailing list 2014-05-01 01:15:32 +02:00
speedstep-ich.c speedstep-ich: Replace cpu_sibling_mask() with topology_sibling_cpumask() 2015-05-27 15:22:16 +02:00
speedstep-lib.c cpufreq: speedstep-lib: Use monotonic clock 2015-09-01 15:51:43 +02:00
speedstep-lib.h
speedstep-smi.c cpufreq: speedstep-smi: enable interrupts when waiting 2015-02-12 02:02:52 +01:00
tegra20-cpufreq.c cpufreq: tegra20: remove superfluous CONFIG_PM ifdefs 2015-09-26 03:00:57 +02:00
tegra124-cpufreq.c cpufreq: Add cpufreq driver for Tegra124 2015-07-16 09:34:09 +02:00
unicore2-cpufreq.c cpufreq: unicore32: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO 2014-04-21 23:42:27 +02:00
vexpress-spc-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00