From: Saravana Kannan <skannan@codeaurora.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: "Rafael J . Wysocki" <rjw@rjwysocki.net>,
Todd Poynor <toddpoynor@google.com>,
"Srivatsa S . Bhat" <srivatsa@mit.edu>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.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: Mon, 11 Aug 2014 15:11:18 -0700 [thread overview]
Message-ID: <53E93F86.5030304@codeaurora.org> (raw)
In-Reply-To: <CAKohpon=xWZJzfN0PceVntumAUFfCsbG1ibUwSxewB7bE=U7bQ@mail.gmail.com>
On 08/07/2014 01:54 AM, Viresh Kumar wrote:
> Sorry for the really long delay this time around. I am used to replying within a
> day normally, and this time it just took so much time.
>
> For next time please rebase on latest updates in pm/linux-next as there are
> few updates there.
Will do.
>
> On 25 July 2014 06:37, Saravana Kannan <skannan@codeaurora.org> 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.
>
> I agree with the idea here, though the $subject can be improved a bit
> here..
Suggestions welcome. I think the current one explains the main point of
this change.
>> 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);
>
> There is a down_read() present early in this routine and we better update this
> at that place only.
I would rather not. My v1 patch series was super refactored to allow a
lot of reuse, etc. But you guys complained about the diffs being
confusing (which was a valid point).
Also, if we are talking about refactoring this, there's room for much
better refactor at the end of the series. I will add a patch to the
series to do the refactoring.
>
>> + if (cpus > 1 && has_target()) {
>
> We already have a if (cpus > 1) block, move this there.
That only runs if cpu != policy->cpu. This needs to run irrespective of
that.
>
>> + 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;
>> - }
>> }
>
> Also, you must mention in the log about an important change you are making.
> Don't know if there are any side effects...
>
> You are emptying policy->cpus on removal of last CPU of a policy, which wasn't
> the case earlier.
You mean the log in the cover letter? Will do.
-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: Mon, 11 Aug 2014 15:11:18 -0700 [thread overview]
Message-ID: <53E93F86.5030304@codeaurora.org> (raw)
In-Reply-To: <CAKohpon=xWZJzfN0PceVntumAUFfCsbG1ibUwSxewB7bE=U7bQ@mail.gmail.com>
On 08/07/2014 01:54 AM, Viresh Kumar wrote:
> Sorry for the really long delay this time around. I am used to replying within a
> day normally, and this time it just took so much time.
>
> For next time please rebase on latest updates in pm/linux-next as there are
> few updates there.
Will do.
>
> On 25 July 2014 06:37, Saravana Kannan <skannan@codeaurora.org> 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.
>
> I agree with the idea here, though the $subject can be improved a bit
> here..
Suggestions welcome. I think the current one explains the main point of
this change.
>> 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);
>
> There is a down_read() present early in this routine and we better update this
> at that place only.
I would rather not. My v1 patch series was super refactored to allow a
lot of reuse, etc. But you guys complained about the diffs being
confusing (which was a valid point).
Also, if we are talking about refactoring this, there's room for much
better refactor at the end of the series. I will add a patch to the
series to do the refactoring.
>
>> + if (cpus > 1 && has_target()) {
>
> We already have a if (cpus > 1) block, move this there.
That only runs if cpu != policy->cpu. This needs to run irrespective of
that.
>
>> + 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;
>> - }
>> }
>
> Also, you must mention in the log about an important change you are making.
> Don't know if there are any side effects...
>
> You are emptying policy->cpus on removal of last CPU of a policy, which wasn't
> the case earlier.
You mean the log in the cover letter? Will do.
-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-08-11 22:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2014-08-11 22:11 ` Saravana Kannan
-- strict thread matches above, loose matches on Subject: below --
2014-08-12 4:40 Viresh Kumar
2014-07-25 1:07 [PATCH v4 0/5] Simplify hotplug/suspend handling 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
2014-07-31 20:47 ` Saravana Kannan
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=53E93F86.5030304@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.