Skip to content

thermal: cpu_cooling: improve interaction with cpufreq core

Viresh Kumar linux-omap linux-pm lkml stable 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest17 patches 11 repliesIn review
  2. v317 patches 4 repliesSuperseded
  3. v217 patches 8 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v117 patches6 repliesSuperseded

Changes in v4 from the cover letter

- The pointer to policy in the cpufreq notifier will have a different address and so that address can't be used for comparison. Compare policy->cpu instead.
- max_level field was used for the newly created power-freq table, but few places I have used < max_level instead of <= max_level and that caused the trouble.
- Added Tested-by from Lukasz.

Patches in v4 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/17thermal: cpu_cooling: Avoid accessing potentially freed structuresdrivers/thermal/cpu_cooling.c+3 -10 replies
2/17thermal: cpu_cooling: rearrange globalsdrivers/thermal/cpu_cooling.c+1 -10 replies
3/17thermal: cpu_cooling: Name cpufreq cooling devices as cpufreq_cdevdrivers/thermal/cpu_cooling.c+124 -1245 replies
4/17thermal: cpu_cooling: replace cool_dev with cdevdrivers/thermal/cpu_cooling.c+18 -190 replies
5/17thermal: cpu_cooling: remove cpufreq_cooling_get_level()drivers/thermal/cpu_cooling.c include/linux/cpu_cooling.h+1 -380 replies
6/17thermal: cpu_cooling: get rid of a variable in cpufreq_set_cur_state()drivers/thermal/cpu_cooling.c+1 -20 replies
7/17thermal: cpu_cooling: use cpufreq_policy to register cooling devicedrivers/cpufreq/arm_big_little.c drivers/cpufreq/cpufreq-dt.c drivers/cpufreq/dbx500-cpufreq.c +6 more+74 -700 replies
8/17cpufreq: create cpufreq_table_count_valid_entries()drivers/cpufreq/cpufreq_stats.c drivers/thermal/cpu_cooling.c include/linux/cpufreq.h+27 -220 replies
9/17thermal: cpu_cooling: store cpufreq policydrivers/thermal/cpu_cooling.c+3 -00 replies
10/17thermal: cpu_cooling: OPPs are registered for all CPUsdrivers/thermal/cpu_cooling.c+11 -150 replies
11/17thermal: cpu_cooling: get rid of 'allowed_cpus'drivers/thermal/cpu_cooling.c+25 -560 replies
12/17thermal: cpu_cooling: merge frequency and power tablesdrivers/thermal/cpu_cooling.c+67 -860 replies
13/17thermal: cpu_cooling: create structure for idle time statsdrivers/thermal/cpu_cooling.c+25 -280 replies
14/17thermal: cpu_cooling: get_level() can't faildrivers/thermal/cpu_cooling.c+5 -150 replies
15/17thermal: cpu_cooling: don't store cpu_dev in cpufreq_cdevdrivers/thermal/cpu_cooling.c+10 -120 replies
16/17thermal: cpu_cooling: 'freq' can't be zero in cpufreq_state2power()drivers/thermal/cpu_cooling.c+4 -30 replies
17/17thermal: cpu_cooling: Rearrange struct cpufreq_cooling_devicedrivers/thermal/cpu_cooling.c+8 -70 replies

Reviews trailers per patch

None of the 17 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchLukasz Luba
SeriesR-b
1/17T-b
2/17T-b
3/17T-b
4/17T-b
5/17T-b
6/17T-b
7/17T-b
8/17T-b
9/17T-b
10/17T-b
11/17T-b
12/17T-b
13/17T-b
14/17T-b
15/17T-b
16/17T-b
17/17T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

Cover letter [PATCH V4 00/17] thermal: cpu_cooling: improve interaction with cpufreq core

Hi Guys,

The cpu_cooling driver is designed to use CPU frequency scaling to avoid high thermal states for a platform. But it wasn't glued really well with cpufreq core. For example clipped-cpus is copied from the policy structure and its much better to use the policy->cpus (or related_cpus) fields directly as they may have got updated. Not that things were broken before this series, but they can be optimized a bit more.

This series tries to improve interactions between cpufreq core and cpu_cooling driver and does some fixes/cleanups to the cpu_cooling driver.

I have tested it on ARM 32 (exynos) and 64 bit (hikey) boards (haven't tested the power specific bits).

Lukasz from ARM has been very generous in testing and finding out few bugs in the earlier versions and getting those fixed. He has successfully tested the new version on his ARM big LITTLE Juno board.

Pushed here as well:

git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git thermal/cooling

V3->V4:
- The pointer to policy in the cpufreq notifier will have a different address and so that address can't be used for comparison. Compare policy->cpu instead.
- max_level field was used for the newly created power-freq table, but few places I have used < max_level instead of <= max_level and that caused the trouble.
- Added Tested-by from Lukasz.

V2->V3:
- Additional check to guarantee that policy is valid.
- Initialize freq-table and cpufreq_cdev->policy fields before they are used by the power-cooling functionality.
- Thanks Lukasz for testing out and suggesting these changes.

V1->V2:
- Name cpufreq cooling dev as cpufreq_cdev everywhere (Eduardo).

--
viresh

Viresh Kumar (17):
thermal: cpu_cooling: Avoid accessing potentially freed structures
thermal: cpu_cooling: rearrange globals
thermal: cpu_cooling: Name cpufreq cooling devices as cpufreq_cdev
thermal: cpu_cooling: replace cool_dev with cdev
thermal: cpu_cooling: remove cpufreq_cooling_get_level()
thermal: cpu_cooling: get rid of a variable in cpufreq_set_cur_state()
thermal: cpu_cooling: use cpufreq_policy to register cooling device
cpufreq: create cpufreq_table_count_valid_entries()
thermal: cpu_cooling: store cpufreq policy
thermal: cpu_cooling: OPPs are registered for all CPUs
thermal: cpu_cooling: get rid of 'allowed_cpus'
thermal: cpu_cooling: merge frequency and power tables
thermal: cpu_cooling: create structure for idle time stats
thermal: cpu_cooling: get_level() can't fail
thermal: cpu_cooling: don't store cpu_dev in cpufreq_cdev
thermal: cpu_cooling: 'freq' can't be zero in cpufreq_state2power()
thermal: cpu_cooling: Rearrange struct cpufreq_cooling_device

 drivers/cpufreq/arm_big_little.c                   |   2 +-
 drivers/cpufreq/cpufreq-dt.c                       |   2 +-
 drivers/cpufreq/cpufreq_stats.c                    |  13 +-
 drivers/cpufreq/dbx500-cpufreq.c                   |   2 +-
 drivers/cpufreq/mt8173-cpufreq.c                   |   4 +-
 drivers/cpufreq/qoriq-cpufreq.c                    |   3 +-
 drivers/thermal/cpu_cooling.c                      | 606 +++++++++------------
 drivers/thermal/imx_thermal.c                      |  22 +-
 drivers/thermal/ti-soc-thermal/ti-thermal-common.c |  22 +-
 include/linux/cpu_cooling.h                        |  32 +-
 include/linux/cpufreq.h                            |  14 +
 11 files changed, 315 insertions(+), 407 deletions(-)
Signature · 1 line
2.12.0.432.g71c3a4f4ba37