Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1601929 > unrolled thread

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

Started byViresh Kumar <viresh.kumar@linaro.org>
First post2017-03-16 06:30 +0100
Last post2017-03-16 06:40 +0100
Articles 3 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [PATCH 00/17] thermal: cpu_cooling: improve interaction with cpufreq core Viresh Kumar <viresh.kumar@linaro.org> - 2017-03-16 06:30 +0100
    [PATCH 01/17] thermal: cpu_cooling: Avoid accessing potentially freed structures Viresh Kumar <viresh.kumar@linaro.org> - 2017-03-16 06:40 +0100
      [PATCH 02/17] thermal: cpu_cooling: rearrange globals Viresh Kumar <viresh.kumar@linaro.org> - 2017-03-16 06:40 +0100

#1601929 — [PATCH 00/17] thermal: cpu_cooling: improve interaction with cpufreq core

FromViresh Kumar <viresh.kumar@linaro.org>
Date2017-03-16 06:30 +0100
Subject[PATCH 00/17] thermal: cpu_cooling: improve interaction with cpufreq core
Message-ID<tlw93-1WG-11@gated-at.bofh.it>
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.

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

I am a bit confused about which tree this series should go through, PM
or thermal.

This series has dependency on few other patches which are already merged
in the PM [1] tree and thermal [2] tree. As this is 4.12 material, all
of this should go through only one tree to avoid conflicts.

I assume that one of Rafael and Rui have to drop the existing patch(es)
from their trees and let the other one apply all of these. I would let
you guys decide on that. Sorry for the trouble.

I have tested it on ARM 32 (exynos) and 64 bit (hikey) boards and have
pushed them for 0-day build bot and kernel CI testing as well. We should
know if something is broken with these.

@Javi: It would be good if you can give them a test, specially because
of your work on the "power" specific bits in the driver.

Pushed here as well:

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

--
viresh

[1] https://marc.info/?l=linux-kernel&m=148946890403271&w=2
[2] https://marc.info/?l=linux-kernel&m=148644060126593&w=2

Viresh Kumar (17):
  thermal: cpu_cooling: Avoid accessing potentially freed structures
  thermal: cpu_cooling: rearrange globals
  thermal: cpu_cooling: Replace cpufreq_device with cpufreq_dev
  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_dev
  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                      | 530 ++++++++-------------
 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, 272 insertions(+), 374 deletions(-)

-- 
2.7.1.410.g6faf27b

[toc] | [next] | [standalone]


#1601953 — [PATCH 01/17] thermal: cpu_cooling: Avoid accessing potentially freed structures

FromViresh Kumar <viresh.kumar@linaro.org>
Date2017-03-16 06:40 +0100
Subject[PATCH 01/17] thermal: cpu_cooling: Avoid accessing potentially freed structures
Message-ID<tlwiJ-223-3@gated-at.bofh.it>
In reply to#1601929
After the lock is dropped, it is possible that the cpufreq_dev gets
freed before we call get_level() and that can cause kernel to crash.

Drop the lock after we are done using the structure.

Cc: 4.2+ <stable@vger.kernel.org>
Fixes: 02373d7c69b4 ("thermal: cpu_cooling: fix lockdep problems in cpu_cooling")
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/thermal/cpu_cooling.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index c2525b585487..6fd258d62e47 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -155,8 +155,10 @@ unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq)
 	mutex_lock(&cooling_list_lock);
 	list_for_each_entry(cpufreq_dev, &cpufreq_dev_list, node) {
 		if (cpumask_test_cpu(cpu, &cpufreq_dev->allowed_cpus)) {
+			unsigned long level = get_level(cpufreq_dev, freq);
+
 			mutex_unlock(&cooling_list_lock);
-			return get_level(cpufreq_dev, freq);
+			return level;
 		}
 	}
 	mutex_unlock(&cooling_list_lock);
-- 
2.7.1.410.g6faf27b

[toc] | [prev] | [next] | [standalone]


#1601954 — [PATCH 02/17] thermal: cpu_cooling: rearrange globals

FromViresh Kumar <viresh.kumar@linaro.org>
Date2017-03-16 06:40 +0100
Subject[PATCH 02/17] thermal: cpu_cooling: rearrange globals
Message-ID<tlwiK-223-39@gated-at.bofh.it>
In reply to#1601953
Just to make it look better.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/thermal/cpu_cooling.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index 6fd258d62e47..7ce73eee866f 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -105,10 +105,9 @@ struct cpufreq_cooling_device {
 	struct device *cpu_dev;
 	get_static_t plat_get_static_power;
 };
-static DEFINE_IDA(cpufreq_ida);
 
 static unsigned int cpufreq_dev_count;
-
+static DEFINE_IDA(cpufreq_ida);
 static DEFINE_MUTEX(cooling_list_lock);
 static LIST_HEAD(cpufreq_dev_list);
 
-- 
2.7.1.410.g6faf27b

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web