linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* thermal: cpu_cooling: Power calculation when CPUs are hotplugged
@ 2015-03-16 12:00 Kapileshwar Singh
  2015-03-16 12:00 ` [PATCH v2 1/2] thermal: cpu_cooling: Remove cpu_dev update on policy CPU update Kapileshwar Singh
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Kapileshwar Singh @ 2015-03-16 12:00 UTC (permalink / raw)
  To: linux-pm
  Cc: edubezval, rui.zhang, Javi.Merino, Punit.Agrawal,
	kapileshwar.singh

The following patch series aims at correcting the requested power
calculation when CPUs are hotplugged out. These patches are based on
the "linus" branch of Eduardo's tree.

There is no need to update the cpu_dev pointer (cached) on the reception of a
policy CPU update notifier from cpufreq. This is not required as OPPs
can be ascertained even if the CPU is offline.

cpufreq_get_requested power ensures that a CPU is online before calculating
the frequency for the CPUs and returns the power as 0 if all the CPUs
are offline in the cooling device.

Regards,
KP

Changes in v2:

* Added the Fixes entry in "thermal: cpu_cooling: Remove cpu_dev update on policy"
* Using the correct mailserver config


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2 1/2] thermal: cpu_cooling: Remove cpu_dev update on policy CPU update
  2015-03-16 12:00 thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
@ 2015-03-16 12:00 ` Kapileshwar Singh
  2015-03-16 12:00 ` [PATCH v2 2/2] thermal: cpu_cooling: Fix power calculation when CPUs are offline Kapileshwar Singh
  2015-03-25 15:55 ` thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
  2 siblings, 0 replies; 4+ messages in thread
From: Kapileshwar Singh @ 2015-03-16 12:00 UTC (permalink / raw)
  To: linux-pm
  Cc: edubezval, rui.zhang, Javi.Merino, Punit.Agrawal,
	kapileshwar.singh

It was initially understood that an update to the cpu_device
(cached in cpufreq_cooling_device) was required to ascertain the
correct operating point of the device on a cpufreq policy->cpu update
or creation or deletion of a cpufreq policy.
(e.g. when the existing policy CPU goes offline).

This update is not required and it is possible to ascertain the OPPs
from the leading CPU in a cpufreq domain even if the CPU is hotplugged out.

Fixes: e0128d8ab423 ("thermal: cpu_cooling: implement the power cooling device API")
Acked-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Kapileshwar Singh <kapileshwar.singh@arm.com>
---
 drivers/thermal/cpu_cooling.c |   40 ----------------------------------------
 1 file changed, 40 deletions(-)

diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index c4974144c787..2e15133b4793 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -199,39 +199,6 @@ unsigned long cpufreq_cooling_get_level(unsigned int cpu, unsigned int freq)
 }
 EXPORT_SYMBOL_GPL(cpufreq_cooling_get_level);
 
-static void update_cpu_device(int cpu)
-{
-	struct cpufreq_cooling_device *cpufreq_dev;
-
-	mutex_lock(&cooling_cpufreq_lock);
-	list_for_each_entry(cpufreq_dev, &cpufreq_dev_list, node) {
-		if (cpumask_test_cpu(cpu, &cpufreq_dev->allowed_cpus)) {
-			cpufreq_dev->cpu_dev = get_cpu_device(cpu);
-			if (!cpufreq_dev->cpu_dev) {
-				dev_warn(&cpufreq_dev->cool_dev->device,
-					"No cpu device for new policy cpu %d\n",
-					 cpu);
-			}
-			break;
-		}
-	}
-	mutex_unlock(&cooling_cpufreq_lock);
-}
-
-static void remove_cpu_device(int cpu)
-{
-	struct cpufreq_cooling_device *cpufreq_dev;
-
-	mutex_lock(&cooling_cpufreq_lock);
-	list_for_each_entry(cpufreq_dev, &cpufreq_dev_list, node) {
-		if (cpumask_test_cpu(cpu, &cpufreq_dev->allowed_cpus)) {
-			cpufreq_dev->cpu_dev = NULL;
-			break;
-		}
-	}
-	mutex_unlock(&cooling_cpufreq_lock);
-}
-
 /**
  * cpufreq_thermal_notifier - notifier callback for cpufreq policy change.
  * @nb:	struct notifier_block * with callback info.
@@ -268,13 +235,6 @@ static int cpufreq_thermal_notifier(struct notifier_block *nb,
 		}
 		mutex_unlock(&cooling_cpufreq_lock);
 		break;
-
-	case CPUFREQ_CREATE_POLICY:
-		update_cpu_device(policy->cpu);
-		break;
-	case CPUFREQ_REMOVE_POLICY:
-		remove_cpu_device(policy->cpu);
-		break;
 	default:
 		return NOTIFY_DONE;
 	}
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] thermal: cpu_cooling: Fix power calculation when CPUs are offline
  2015-03-16 12:00 thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
  2015-03-16 12:00 ` [PATCH v2 1/2] thermal: cpu_cooling: Remove cpu_dev update on policy CPU update Kapileshwar Singh
@ 2015-03-16 12:00 ` Kapileshwar Singh
  2015-03-25 15:55 ` thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
  2 siblings, 0 replies; 4+ messages in thread
From: Kapileshwar Singh @ 2015-03-16 12:00 UTC (permalink / raw)
  To: linux-pm
  Cc: edubezval, rui.zhang, Javi.Merino, Punit.Agrawal,
	kapileshwar.singh

Ensure that the CPU for which the frequency is being requested
is online. If none of the CPUs are online the requested power is
returned as 0.

Acked-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Kapileshwar Singh <kapileshwar.singh@arm.com>
---
 drivers/thermal/cpu_cooling.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
index 2e15133b4793..07a9629edf4b 100644
--- a/drivers/thermal/cpu_cooling.c
+++ b/drivers/thermal/cpu_cooling.c
@@ -555,7 +555,18 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
 	struct cpufreq_cooling_device *cpufreq_device = cdev->devdata;
 	u32 *load_cpu = NULL;
 
-	freq = cpufreq_quick_get(cpumask_any(&cpufreq_device->allowed_cpus));
+	cpu = cpumask_any_and(&cpufreq_device->allowed_cpus, cpu_online_mask);
+
+	/*
+	 * All the CPUs are offline, thus the requested power by
+	 * the cdev is 0
+	 */
+	if (cpu >= nr_cpu_ids) {
+		*power = 0;
+		return 0;
+	}
+
+	freq = cpufreq_quick_get(cpu);
 
 	if (trace_thermal_power_cpu_get_power_enabled()) {
 		u32 ncpus = cpumask_weight(&cpufreq_device->allowed_cpus);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: thermal: cpu_cooling: Power calculation when CPUs are hotplugged
  2015-03-16 12:00 thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
  2015-03-16 12:00 ` [PATCH v2 1/2] thermal: cpu_cooling: Remove cpu_dev update on policy CPU update Kapileshwar Singh
  2015-03-16 12:00 ` [PATCH v2 2/2] thermal: cpu_cooling: Fix power calculation when CPUs are offline Kapileshwar Singh
@ 2015-03-25 15:55 ` Kapileshwar Singh
  2 siblings, 0 replies; 4+ messages in thread
From: Kapileshwar Singh @ 2015-03-25 15:55 UTC (permalink / raw)
  To: linux-pm@vger.kernel.org
  Cc: edubezval@gmail.com, rui.zhang@intel.com, Javi Merino,
	Punit Agrawal

A gentle ping for a review.

On 16/03/15 12:00, Kapileshwar Singh wrote:
> The following patch series aims at correcting the requested power
> calculation when CPUs are hotplugged out. These patches are based on
> the "linus" branch of Eduardo's tree.
> 
> There is no need to update the cpu_dev pointer (cached) on the reception of a
> policy CPU update notifier from cpufreq. This is not required as OPPs
> can be ascertained even if the CPU is offline.
> 
> cpufreq_get_requested power ensures that a CPU is online before calculating
> the frequency for the CPUs and returns the power as 0 if all the CPUs
> are offline in the cooling device.
> 
> Regards,
> KP
> 
> Changes in v2:
> 
> * Added the Fixes entry in "thermal: cpu_cooling: Remove cpu_dev update on policy"
> * Using the correct mailserver config
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-03-25 16:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-16 12:00 thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh
2015-03-16 12:00 ` [PATCH v2 1/2] thermal: cpu_cooling: Remove cpu_dev update on policy CPU update Kapileshwar Singh
2015-03-16 12:00 ` [PATCH v2 2/2] thermal: cpu_cooling: Fix power calculation when CPUs are offline Kapileshwar Singh
2015-03-25 15:55 ` thermal: cpu_cooling: Power calculation when CPUs are hotplugged Kapileshwar Singh

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).