From: Saravana Kannan <skannan@codeaurora.org>
To: Saravana Kannan <skannan@codeaurora.org>
Cc: "Rafael J . Wysocki" <rjw@rjwysocki.net>,
Viresh Kumar <viresh.kumar@linaro.org>,
Todd Poynor <toddpoynor@google.com>,
"Srivatsa S . Bhat" <srivatsa@mit.edu>,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Stephen Boyd <sboyd@codeaurora.org>
Subject: Re: [PATCH v4 1/5] cpufreq: Don't wait for CPU to going offline to restart governor
Date: Thu, 31 Jul 2014 13:47:48 -0700 [thread overview]
Message-ID: <53DAAB74.7050003@codeaurora.org> (raw)
In-Reply-To: <1406250448-470-2-git-send-email-skannan@codeaurora.org>
On 07/24/2014 06:07 PM, Saravana Kannan wrote:
> There's no need to wait for the CPU going down to fully go offline to
> restart the governor. We can stop the governor, change policy->cpus and
> immediately restart the governor. This should reduce the time without any
> CPUfreq monitoring and also help future patches with simplifying the code.
>
> Signed-off-by: Saravana Kannan <skannan@codeaurora.org>
> ---
> drivers/cpufreq/cpufreq.c | 33 ++++++++++++++++++---------------
> 1 file changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 62259d2..ee0eb7b 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1390,6 +1390,21 @@ static int __cpufreq_remove_dev_prepare(struct device *dev,
> cpufreq_driver->stop_cpu(policy);
> }
>
> + down_write(&policy->rwsem);
> + cpumask_clear_cpu(cpu, policy->cpus);
> + up_write(&policy->rwsem);
> +
> + if (cpus > 1 && has_target()) {
> + ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
> + if (!ret)
> + ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
> +
> + if (ret) {
> + pr_err("%s: Failed to start governor\n", __func__);
> + return ret;
> + }
> + }
> +
> return 0;
> }
>
> @@ -1410,15 +1425,12 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
> return -EINVAL;
> }
>
> - down_write(&policy->rwsem);
> + down_read(&policy->rwsem);
> cpus = cpumask_weight(policy->cpus);
> -
> - if (cpus > 1)
> - cpumask_clear_cpu(cpu, policy->cpus);
> - up_write(&policy->rwsem);
> + up_read(&policy->rwsem);
>
> /* If cpu is last user of policy, free policy */
> - if (cpus == 1) {
> + if (cpus == 0) {
> if (has_target()) {
> ret = __cpufreq_governor(policy,
> CPUFREQ_GOV_POLICY_EXIT);
> @@ -1447,15 +1459,6 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
>
> if (!cpufreq_suspended)
> cpufreq_policy_free(policy);
> - } else if (has_target()) {
> - ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
> - if (!ret)
> - ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
> -
> - if (ret) {
> - pr_err("%s: Failed to start governor\n", __func__);
> - return ret;
> - }
> }
>
> per_cpu(cpufreq_cpu_data, cpu) = NULL;
>
This patch should also fix another issue reported in-house recently.
cpufreq_update_policy() fails for an ONLINE CPU. This is the scenario
that triggers it:
Thead A
- Cluster with 4 CPUs
- CPU3 is going down.
- Governor is STOPed.
- CPU3 is removed, but governor not STARTed yet.
Thread B
- get_online_cpus()
- We cross this hotplug barrier since since POST_DEAD is sent AFTER
releasing the hotplug lock.
- cpufreq_update_policy(CPU0) does a bunch of stuff
- Then sends GOV_LIMITS to governor.
- governor is currently STOPed, so it returns an error and
cpufreq_update_policy() fails.
Thread A
- In POST_DEAD notifier, STARTs the governor again.
So, a perfectly valid call (doing get_online_cpus() and checking for
cpu_online() on a CPU before calling) fails.
-Saravana
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: skannan@codeaurora.org (Saravana Kannan)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 1/5] cpufreq: Don't wait for CPU to going offline to restart governor
Date: Thu, 31 Jul 2014 13:47:48 -0700 [thread overview]
Message-ID: <53DAAB74.7050003@codeaurora.org> (raw)
In-Reply-To: <1406250448-470-2-git-send-email-skannan@codeaurora.org>
On 07/24/2014 06:07 PM, Saravana Kannan wrote:
> There's no need to wait for the CPU going down to fully go offline to
> restart the governor. We can stop the governor, change policy->cpus and
> immediately restart the governor. This should reduce the time without any
> CPUfreq monitoring and also help future patches with simplifying the code.
>
> Signed-off-by: Saravana Kannan <skannan@codeaurora.org>
> ---
> drivers/cpufreq/cpufreq.c | 33 ++++++++++++++++++---------------
> 1 file changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 62259d2..ee0eb7b 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1390,6 +1390,21 @@ static int __cpufreq_remove_dev_prepare(struct device *dev,
> cpufreq_driver->stop_cpu(policy);
> }
>
> + down_write(&policy->rwsem);
> + cpumask_clear_cpu(cpu, policy->cpus);
> + up_write(&policy->rwsem);
> +
> + if (cpus > 1 && has_target()) {
> + ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
> + if (!ret)
> + ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
> +
> + if (ret) {
> + pr_err("%s: Failed to start governor\n", __func__);
> + return ret;
> + }
> + }
> +
> return 0;
> }
>
> @@ -1410,15 +1425,12 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
> return -EINVAL;
> }
>
> - down_write(&policy->rwsem);
> + down_read(&policy->rwsem);
> cpus = cpumask_weight(policy->cpus);
> -
> - if (cpus > 1)
> - cpumask_clear_cpu(cpu, policy->cpus);
> - up_write(&policy->rwsem);
> + up_read(&policy->rwsem);
>
> /* If cpu is last user of policy, free policy */
> - if (cpus == 1) {
> + if (cpus == 0) {
> if (has_target()) {
> ret = __cpufreq_governor(policy,
> CPUFREQ_GOV_POLICY_EXIT);
> @@ -1447,15 +1459,6 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
>
> if (!cpufreq_suspended)
> cpufreq_policy_free(policy);
> - } else if (has_target()) {
> - ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
> - if (!ret)
> - ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
> -
> - if (ret) {
> - pr_err("%s: Failed to start governor\n", __func__);
> - return ret;
> - }
> }
>
> per_cpu(cpufreq_cpu_data, cpu) = NULL;
>
This patch should also fix another issue reported in-house recently.
cpufreq_update_policy() fails for an ONLINE CPU. This is the scenario
that triggers it:
Thead A
- Cluster with 4 CPUs
- CPU3 is going down.
- Governor is STOPed.
- CPU3 is removed, but governor not STARTed yet.
Thread B
- get_online_cpus()
- We cross this hotplug barrier since since POST_DEAD is sent AFTER
releasing the hotplug lock.
- cpufreq_update_policy(CPU0) does a bunch of stuff
- Then sends GOV_LIMITS to governor.
- governor is currently STOPed, so it returns an error and
cpufreq_update_policy() fails.
Thread A
- In POST_DEAD notifier, STARTs the governor again.
So, a perfectly valid call (doing get_online_cpus() and checking for
cpu_online() on a CPU before calling) fails.
-Saravana
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation
next prev parent reply other threads:[~2014-07-31 20:47 UTC|newest]
Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-10 2:37 [PATCH] cpufreq: Don't destroy/realloc policy/sysfs on hotplug/suspend Saravana Kannan
2014-07-10 2:37 ` Saravana Kannan
2014-07-11 4:18 ` [PATCH v2] " Saravana Kannan
2014-07-11 4:18 ` Saravana Kannan
2014-07-11 6:19 ` Viresh Kumar
2014-07-11 6:19 ` Viresh Kumar
2014-07-11 9:59 ` skannan
2014-07-11 9:59 ` skannan at codeaurora.org
2014-07-11 10:07 ` skannan
2014-07-11 10:07 ` skannan
2014-07-11 10:07 ` skannan at codeaurora.org
2014-07-11 10:52 ` Viresh Kumar
2014-07-11 10:52 ` Viresh Kumar
2014-07-12 2:44 ` Saravana Kannan
2014-07-12 2:44 ` Saravana Kannan
2014-07-14 6:09 ` Viresh Kumar
2014-07-14 6:09 ` Viresh Kumar
2014-07-14 19:08 ` Saravana Kannan
2014-07-14 19:08 ` Saravana Kannan
2014-07-15 4:35 ` Viresh Kumar
2014-07-15 4:35 ` Viresh Kumar
2014-07-15 5:36 ` Saravana Kannan
2014-07-15 5:36 ` Saravana Kannan
2014-07-15 5:52 ` Viresh Kumar
2014-07-15 5:52 ` Viresh Kumar
2014-07-15 6:58 ` Srivatsa S. Bhat
2014-07-15 6:58 ` Srivatsa S. Bhat
2014-07-15 6:58 ` Srivatsa S. Bhat
2014-07-15 17:35 ` skannan
2014-07-15 17:35 ` skannan at codeaurora.org
2014-07-16 7:44 ` Srivatsa S. Bhat
2014-07-16 7:44 ` Srivatsa S. Bhat
2014-07-16 5:44 ` Viresh Kumar
2014-07-16 5:44 ` Viresh Kumar
2014-07-16 7:49 ` Srivatsa S. Bhat
2014-07-16 7:49 ` Srivatsa S. Bhat
2014-07-12 3:06 ` Saravana Kannan
2014-07-12 3:06 ` Saravana Kannan
2014-07-14 6:13 ` Viresh Kumar
2014-07-14 6:13 ` Viresh Kumar
2014-07-14 19:10 ` Saravana Kannan
2014-07-14 19:10 ` Saravana Kannan
2014-07-11 7:43 ` Srivatsa S. Bhat
2014-07-11 7:43 ` Srivatsa S. Bhat
2014-07-11 10:02 ` skannan
2014-07-11 10:02 ` skannan at codeaurora.org
2014-07-15 22:47 ` [PATCH v3 0/2] Simplify hotplug/suspend handling Saravana Kannan
2014-07-15 22:47 ` Saravana Kannan
2014-07-15 22:47 ` [PATCH v3 1/2] cpufreq: Don't destroy/realloc policy/sysfs on hotplug/suspend Saravana Kannan
2014-07-15 22:47 ` Saravana Kannan
2014-07-16 0:28 ` Saravana Kannan
2014-07-16 0:28 ` Saravana Kannan
2014-07-16 8:30 ` Viresh Kumar
2014-07-16 8:30 ` Viresh Kumar
2014-07-16 19:19 ` Saravana Kannan
2014-07-16 19:19 ` Saravana Kannan
2014-07-16 19:19 ` Saravana Kannan
2014-07-16 8:24 ` Viresh Kumar
2014-07-16 8:24 ` Viresh Kumar
2014-07-16 11:16 ` Srivatsa S. Bhat
2014-07-16 11:16 ` Srivatsa S. Bhat
2014-07-16 13:13 ` Viresh Kumar
2014-07-16 13:13 ` Viresh Kumar
2014-07-16 18:04 ` Srivatsa S. Bhat
2014-07-16 18:04 ` Srivatsa S. Bhat
2014-07-16 19:56 ` Saravana Kannan
2014-07-16 19:56 ` Saravana Kannan
2014-07-17 5:51 ` Viresh Kumar
2014-07-17 5:51 ` Viresh Kumar
2014-07-16 19:56 ` Saravana Kannan
2014-07-16 19:56 ` Saravana Kannan
2014-07-17 5:35 ` Viresh Kumar
2014-07-17 5:35 ` Viresh Kumar
2014-07-18 3:25 ` Saravana Kannan
2014-07-18 3:25 ` Saravana Kannan
2014-07-18 4:19 ` Viresh Kumar
2014-07-18 4:19 ` Viresh Kumar
2014-07-16 20:25 ` Saravana Kannan
2014-07-16 20:25 ` Saravana Kannan
2014-07-16 21:45 ` Saravana Kannan
2014-07-16 21:45 ` Saravana Kannan
2014-07-17 6:24 ` Viresh Kumar
2014-07-17 6:24 ` Viresh Kumar
2014-07-16 14:29 ` Dirk Brandewie
2014-07-16 14:29 ` Dirk Brandewie
2014-07-16 15:28 ` Viresh Kumar
2014-07-16 15:28 ` Viresh Kumar
2014-07-16 19:42 ` Saravana Kannan
2014-07-16 19:42 ` Saravana Kannan
2014-07-15 22:47 ` [PATCH v3 2/2] cpufreq: Simplify and fix mutual exclusion with hotplug Saravana Kannan
2014-07-15 22:47 ` Saravana Kannan
2014-07-16 8:48 ` Viresh Kumar
2014-07-16 8:48 ` Viresh Kumar
2014-07-16 19:34 ` Saravana Kannan
2014-07-16 19:34 ` Saravana Kannan
2014-07-25 1:07 ` [PATCH v4 0/5] Simplify hotplug/suspend handling Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-07-25 1:07 ` [PATCH v4 1/5] cpufreq: Don't wait for CPU to going offline to restart governor Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-07-31 20:47 ` Saravana Kannan [this message]
2014-07-31 20:47 ` Saravana Kannan
2014-07-25 1:07 ` [PATCH v4 2/5] cpufreq: Keep track of which CPU owns the kobj/sysfs nodes separately Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-08-07 9:02 ` Viresh Kumar
2014-08-07 9:02 ` Viresh Kumar
2014-07-25 1:07 ` [PATCH v4 3/5] cpufreq: Don't destroy/realloc policy/sysfs on hotplug/suspend Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-07-31 21:56 ` Rafael J. Wysocki
2014-07-31 21:56 ` Rafael J. Wysocki
2014-07-31 22:15 ` Saravana Kannan
2014-07-31 22:15 ` Saravana Kannan
2014-07-31 23:48 ` Saravana Kannan
2014-07-31 23:48 ` Saravana Kannan
2014-07-31 23:48 ` Saravana Kannan
2014-08-07 10:51 ` Viresh Kumar
2014-08-07 10:51 ` Viresh Kumar
2014-08-12 9:17 ` Viresh Kumar
2014-08-12 9:17 ` Viresh Kumar
2014-08-07 10:48 ` Viresh Kumar
2014-08-07 10:48 ` Viresh Kumar
2014-08-11 22:13 ` Saravana Kannan
2014-08-11 22:13 ` Saravana Kannan
2014-08-12 8:51 ` Viresh Kumar
2014-08-12 8:51 ` Viresh Kumar
2014-07-25 1:07 ` [PATCH v4 4/5] cpufreq: Properly handle physical CPU hot-add/hot-remove Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-08-07 11:02 ` Viresh Kumar
2014-08-07 11:02 ` Viresh Kumar
2014-08-11 22:15 ` Saravana Kannan
2014-08-11 22:15 ` Saravana Kannan
2014-07-25 1:07 ` [PATCH v4 5/5] cpufreq: Delete dead code related to policy save/restore Saravana Kannan
2014-07-25 1:07 ` Saravana Kannan
2014-08-07 11:06 ` Viresh Kumar
2014-08-07 11:06 ` Viresh Kumar
2014-07-29 5:52 ` [PATCH v4 0/5] Simplify hotplug/suspend handling skannan
2014-07-29 5:52 ` skannan
2014-07-29 5:52 ` skannan at codeaurora.org
2014-07-30 0:29 ` Rafael J. Wysocki
2014-07-30 0:29 ` Rafael J. Wysocki
2014-07-31 20:25 ` Saravana Kannan
2014-07-31 20:25 ` Saravana Kannan
2014-08-07 6:04 ` skannan
2014-08-07 6:04 ` skannan at codeaurora.org
2014-10-16 8:53 ` Viresh Kumar
2014-10-16 8:53 ` Viresh Kumar
2014-10-23 21:41 ` Saravana Kannan
2014-10-23 21:41 ` Saravana Kannan
2014-07-16 22:02 ` [PATCH] cpufreq: Don't destroy/realloc policy/sysfs on hotplug/suspend Rafael J. Wysocki
2014-07-16 22:02 ` Rafael J. Wysocki
2014-07-16 22:35 ` Saravana Kannan
2014-07-16 22:35 ` Saravana Kannan
2014-07-24 3:02 ` Saravana Kannan
2014-07-24 3:02 ` Saravana Kannan
2014-07-24 5:04 ` Viresh Kumar
2014-07-24 5:04 ` Viresh Kumar
2014-07-24 9:12 ` skannan
2014-07-24 9:12 ` skannan at codeaurora.org
-- strict thread matches above, loose matches on Subject: below --
2014-08-07 8:54 [PATCH v4 1/5] cpufreq: Don't wait for CPU to going offline to restart governor Viresh Kumar
2014-08-11 22:11 ` Saravana Kannan
2014-08-11 22:11 ` Saravana Kannan
2014-08-12 4:40 Viresh Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53DAAB74.7050003@codeaurora.org \
--to=skannan@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.org \
--cc=srivatsa@mit.edu \
--cc=toddpoynor@google.com \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.