From: Viresh Kumar <viresh.kumar@linaro.org>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Linux PM list <linux-pm@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 7/12] cpufreq: ondemand: Rework the handling of powersave bias updates
Date: Thu, 18 Feb 2016 11:23:54 +0530 [thread overview]
Message-ID: <20160218055354.GM2610@vireshk-i7> (raw)
In-Reply-To: <2373952.xlh20cNGZI@vostro.rjw.lan>
On 18-02-16, 02:28, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> The ondemand_powersave_bias_init() function used for resetting data
> fields related to the powersave bias tunable of the ondemand governor
> works by walking all of the online CPUs in the system and updating the
> od_cpu_dbs_info_s structures for all of them.
>
> However, if governor tunables are per policy, the update should not
> touch the CPUs that are not associated with the given dbs_data.
>
> Moreover, since the data fields in question are only ever used for
> policy->cpu in each policy governed by ondemand, the update can be
> limited to those specific CPUs.
Now that I am looking at struct **_cpu_dbs_info_s definitions, I think
we need to change the design of the structures a bit. Only cdbs is
something that is per-cpu and everything else is per-policy. And so we
will be able to move the per-cpu structures present in individual
governors into cpufreq_governor.c and save some memory.
> Rework the code to take the above observations into account.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/cpufreq/cpufreq_ondemand.c | 30 +++++++++++++-----------------
> 1 file changed, 13 insertions(+), 17 deletions(-)
>
> Index: linux-pm/drivers/cpufreq/cpufreq_ondemand.c
> ===================================================================
> --- linux-pm.orig/drivers/cpufreq/cpufreq_ondemand.c
> +++ linux-pm/drivers/cpufreq/cpufreq_ondemand.c
> @@ -34,14 +34,6 @@ static struct od_ops od_ops;
>
> static unsigned int default_powersave_bias;
>
> -static void ondemand_powersave_bias_init_cpu(int cpu)
> -{
> - struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
> -
> - dbs_info->freq_table = cpufreq_frequency_get_table(cpu);
> - dbs_info->freq_lo = 0;
> -}
> -
> /*
> * Not all CPUs want IO time to be accounted as busy; this depends on how
> * efficient idling at a higher frequency/voltage is.
> @@ -120,12 +112,13 @@ static unsigned int generic_powersave_bi
> return freq_hi;
> }
>
> -static void ondemand_powersave_bias_init(void)
> +static void ondemand_powersave_bias_init(struct cpufreq_policy *policy)
> {
> - int i;
> - for_each_online_cpu(i) {
> - ondemand_powersave_bias_init_cpu(i);
> - }
> + unsigned int cpu = policy->cpu;
> + struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
> +
> + dbs_info->freq_table = cpufreq_frequency_get_table(cpu);
> + dbs_info->freq_lo = 0;
> }
>
> static void dbs_freq_increase(struct cpufreq_policy *policy, unsigned int freq)
> @@ -306,6 +299,7 @@ static ssize_t store_powersave_bias(stru
> size_t count)
> {
> struct od_dbs_tuners *od_tuners = dbs_data->tuners;
> + struct policy_dbs_info *policy_dbs;
> unsigned int input;
> int ret;
> ret = sscanf(buf, "%u", &input);
> @@ -317,7 +311,10 @@ static ssize_t store_powersave_bias(stru
> input = 1000;
>
> od_tuners->powersave_bias = input;
> - ondemand_powersave_bias_init();
> +
> + list_for_each_entry(policy_dbs, &dbs_data->policy_dbs_list, list)
> + ondemand_powersave_bias_init(policy_dbs->policy);
> +
> return count;
> }
>
> @@ -398,11 +395,10 @@ static void od_exit(struct dbs_data *dbs
>
> static void od_start(struct cpufreq_policy *policy)
> {
> - unsigned int cpu = policy->cpu;
> - struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
> + struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, policy->cpu);
>
> dbs_info->sample_type = OD_NORMAL_SAMPLE;
> - ondemand_powersave_bias_init_cpu(cpu);
> + ondemand_powersave_bias_init(policy);
> }
>
> define_get_cpu_dbs_routines(od_cpu_dbs_info);
I agree with the patch, but because we have all these fields per-cpu,
I feel a bit scared while depending on policy->cpu for everything.
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
--
viresh
next prev parent reply other threads:[~2016-02-18 5:54 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-18 1:17 [PATCH 0/12] cpufreq: More governor code reorganization Rafael J. Wysocki
2016-02-18 1:19 ` [PATCH 1/12] cpufreq: governor: Close dbs_data update race condition Rafael J. Wysocki
2016-02-18 5:24 ` Viresh Kumar
2016-02-18 16:20 ` Rafael J. Wysocki
2016-02-19 2:27 ` Viresh Kumar
2016-02-19 2:34 ` Rafael J. Wysocki
2016-02-19 3:09 ` Viresh Kumar
2016-02-18 1:20 ` [PATCH 2/12] cpufreq: governor: Move io_is_busy to struct dbs_data Rafael J. Wysocki
2016-02-18 5:28 ` Viresh Kumar
2016-02-18 1:21 ` [PATCH 3/12] cpufreq: governor: Add a ->start callback for governors Rafael J. Wysocki
2016-02-18 5:36 ` Viresh Kumar
2016-02-18 1:22 ` [PATCH 4/12] cpufreq: governor: Drop unused governor callback and data fields Rafael J. Wysocki
2016-02-18 5:37 ` Viresh Kumar
2016-02-18 1:24 ` [PATCH 5/12] cpufreq: ondemand: Drop one more callback from struct od_ops Rafael J. Wysocki
2016-02-18 5:38 ` Viresh Kumar
2016-02-18 1:26 ` [PATCH 6/12] cpufreq: governor: Fix CPU load information updates via ->store Rafael J. Wysocki
2016-02-18 5:44 ` Viresh Kumar
2016-02-18 17:37 ` Rafael J. Wysocki
2016-02-18 1:28 ` [PATCH 7/12] cpufreq: ondemand: Rework the handling of powersave bias updates Rafael J. Wysocki
2016-02-18 5:53 ` Viresh Kumar [this message]
2016-02-18 1:30 ` [PATCH 8/12] cpufreq: governor: Make governor private data per-policy Rafael J. Wysocki
2016-02-18 6:03 ` Viresh Kumar
2016-02-18 17:56 ` [PATCH v2 " Rafael J. Wysocki
2016-02-19 2:36 ` Viresh Kumar
2016-02-18 1:31 ` [PATCH 9/12] cpufreq: governor: Move per-CPU data to the common code Rafael J. Wysocki
2016-02-18 6:08 ` Viresh Kumar
2016-02-18 1:32 ` [PATCH 10/12] cpufreq: governor: Relocate definitions of tuners structures Rafael J. Wysocki
2016-02-18 6:09 ` Viresh Kumar
2016-02-18 17:57 ` [PATCH v2 " Rafael J. Wysocki
2016-02-19 2:36 ` Viresh Kumar
2016-02-18 1:33 ` [PATCH 11/12] cpufreq: governor: Make dbs_data_mutex static Rafael J. Wysocki
2016-02-18 6:09 ` Viresh Kumar
2016-02-18 1:38 ` [PATCH 12/12] cpufreq: governor: Narrow down the dbs_data_mutex coverage Rafael J. Wysocki
2016-02-18 6:20 ` Viresh Kumar
2016-02-18 16:32 ` Rafael J. Wysocki
2016-02-18 17:58 ` [PATCH v2 " Rafael J. Wysocki
2016-02-19 2:38 ` 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=20160218055354.GM2610@vireshk-i7 \
--to=viresh.kumar@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
/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 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).