linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Saravana Kannan <skannan@codeaurora.org>
To: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux PM list <linux-pm@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	Juri Lelli <juri.lelli@arm.com>,
	Steve Muckle <steve.muckle@linaro.org>
Subject: Re: [PATCH 3/11] cpufreq: governor: Use common global_dbs_data pointer
Date: Wed, 03 Feb 2016 17:40:24 -0800	[thread overview]
Message-ID: <56B2AC08.7060006@codeaurora.org> (raw)
In-Reply-To: <CAJZ5v0gdR23cCocT3qw4ry26bMQ=qjcwatk9uu-Z1JDLKTSffQ@mail.gmail.com>

On 02/03/2016 05:25 PM, Rafael J. Wysocki wrote:
> On Thu, Feb 4, 2016 at 2:11 AM, Saravana Kannan <skannan@codeaurora.org> wrote:
>> On 02/03/2016 03:22 PM, Rafael J. Wysocki wrote:
>>>
>>> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>>
>>> If the ondemand and conservative governors cannot use per-policy
>>> tunables (CPUFREQ_HAVE_GOVERNOR_PER_POLICY is not set in the cpufreq
>>> driver), all policy objects point to the same single dbs_data object.
>>> Additionally, that object is pointed to by a global pointer hidden in
>>> the governor's data structures.
>>>
>>> There is no reason for that pointer to be buried in those
>>> data structures, though, so make it explicitly global.
>>>
>>> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>> ---
>>>    drivers/cpufreq/cpufreq_governor.c |   20 ++++++++++----------
>>>    drivers/cpufreq/cpufreq_governor.h |   20 ++++++++++----------
>>>    2 files changed, 20 insertions(+), 20 deletions(-)
>>>
>>> Index: linux-pm/drivers/cpufreq/cpufreq_governor.h
>>> ===================================================================
>>> --- linux-pm.orig/drivers/cpufreq/cpufreq_governor.h
>>> +++ linux-pm/drivers/cpufreq/cpufreq_governor.h
>>> @@ -78,7 +78,7 @@ __ATTR(_name, 0644, show_##_name##_gov_p
>>>    static ssize_t show_##file_name##_gov_sys                             \
>>>    (struct kobject *kobj, struct attribute *attr, char *buf)             \
>>>    {                                                                     \
>>> -       struct _gov##_dbs_tuners *tuners =
>>> _gov##_dbs_cdata.gdbs_data->tuners; \
>>> +       struct _gov##_dbs_tuners *tuners = global_dbs_data->tuners; \
>>>          return sprintf(buf, "%u\n", tuners->file_name);                 \
>>>    }                                                                     \
>>>                                                                          \
>>> @@ -94,7 +94,7 @@ static ssize_t show_##file_name##_gov_po
>>>    static ssize_t store_##file_name##_gov_sys                            \
>>>    (struct kobject *kobj, struct attribute *attr, const char *buf, size_t
>>> count) \
>>>    {                                                                     \
>>> -       struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data;         \
>>> +       struct dbs_data *dbs_data = global_dbs_data;            \
>>>          return store_##file_name(dbs_data, buf, count);                 \
>>>    }                                                                     \
>>>                                                                          \
>>> @@ -201,19 +201,14 @@ struct cs_dbs_tuners {
>>>    /* Common Governor data across policies */
>>>    struct dbs_data;
>>>    struct common_dbs_data {
>>> -       /* Common across governors */
>>> +       struct cpufreq_governor gov;
>>> +
>>>          #define GOV_ONDEMAND            0
>>>          #define GOV_CONSERVATIVE        1
>>>          int governor;
>>>          struct attribute_group *attr_group_gov_sys; /* one governor -
>>> system */
>>>          struct attribute_group *attr_group_gov_pol; /* one governor -
>>> policy */
>>>
>>> -       /*
>>> -        * Common data for platforms that don't set
>>> -        * CPUFREQ_HAVE_GOVERNOR_PER_POLICY
>>> -        */
>>> -       struct dbs_data *gdbs_data;
>>> -
>>>          struct cpu_dbs_info *(*get_cpu_cdbs)(int cpu);
>>>          void *(*get_cpu_dbs_info_s)(int cpu);
>>>          unsigned int (*gov_dbs_timer)(struct cpufreq_policy *policy);
>>> @@ -233,6 +228,11 @@ struct dbs_data {
>>>          void *tuners;
>>>    };
>>>
>>> +/*
>>> + * Common governor data for platforms without
>>> CPUFREQ_HAVE_GOVERNOR_PER_POLICY.
>>> + */
>>> +extern struct dbs_data *global_dbs_data;
>>> +
>>>    /* Governor specific ops, will be passed to dbs_data->gov_ops */
>>>    struct od_ops {
>>>          void (*powersave_bias_init_cpu)(int cpu);
>>> @@ -256,7 +256,7 @@ static inline int delay_for_sampling_rat
>>>    static ssize_t show_sampling_rate_min_gov_sys                         \
>>>    (struct kobject *kobj, struct attribute *attr, char *buf)             \
>>>    {                                                                     \
>>> -       struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data;         \
>>> +       struct dbs_data *dbs_data = global_dbs_data;                    \
>>>          return sprintf(buf, "%u\n", dbs_data->min_sampling_rate);       \
>>>    }                                                                     \
>>>                                                                          \
>>> Index: linux-pm/drivers/cpufreq/cpufreq_governor.c
>>> ===================================================================
>>> --- linux-pm.orig/drivers/cpufreq/cpufreq_governor.c
>>> +++ linux-pm/drivers/cpufreq/cpufreq_governor.c
>>> @@ -22,6 +22,9 @@
>>>
>>>    #include "cpufreq_governor.h"
>>>
>>> +struct dbs_data *global_dbs_data;
>>> +EXPORT_SYMBOL_GPL(global_dbs_data);
>>> +
>>>    DEFINE_MUTEX(dbs_data_mutex);
>>>    EXPORT_SYMBOL_GPL(dbs_data_mutex);
>>>
>>> @@ -377,22 +380,19 @@ static int cpufreq_governor_init(struct
>>>                                          latency * LATENCY_MULTIPLIER));
>>>
>>>          if (!have_governor_per_policy())
>>> -               cdata->gdbs_data = dbs_data;
>>> +               global_dbs_data = dbs_data;
>>>
>>>          policy->governor_data = dbs_data;
>>>
>>>          ret = sysfs_create_group(get_governor_parent_kobj(policy),
>>>                                   get_sysfs_attr(dbs_data));
>>> -       if (ret)
>>> -               goto reset_gdbs_data;
>>> -
>>> -       return 0;
>>> +       if (!ret)
>>> +               return 0;
>>
>>
>> I think the previous method of a handling the error is easier to read and
>> more in line with the typical kernel coding style. The successful path ends
>> in an unconditional return statement and the error paths are handled with a
>> goto.
>
> You are talking about something like this now:
>
>      if (condition)
>          goto label;
>
>      return 0;
>
> label:
>      do stuff
>
> I'm sorry, but I fail to see how this is easier to read than
>
>      if (!condition)
>          return 0;
>
>      do stuff
>
> The return statement is not unconditional in either case, but in the
> first one it is just obfuscated by using the label and goto which are
> completely unnecessary.
>

It's more readable because someone new is quickly scanning the code to 
understand what's going on, once you hit an unconditional return (as in, 
return without any ifs around it) you can just assume the rest of the 
code is error handling and skip reading/mentally processing them.

That, and it's more inline with how most of the kernel handles error 
conditions.

Anyway, you are removing it since it's not related to the patch. So, not 
planning to debate this fairly subjective opinion further.

-Saravana

-- 
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2016-02-04  1:40 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-03 23:12 [PATCH 0/11] cpufreq: governor: ondemand/conservative data structures rework Rafael J. Wysocki
2016-02-03 23:14 ` [PATCH 1/11] cpufreq: Clean up default and fallback governor setup Rafael J. Wysocki
2016-02-04  0:55   ` Saravana Kannan
2016-02-04  5:03   ` Viresh Kumar
2016-02-03 23:16 ` [PATCH 2/11] cpufreq: governor: Use common mutex for dbs_data protection Rafael J. Wysocki
2016-02-04  0:59   ` Saravana Kannan
2016-02-04  5:09   ` Viresh Kumar
2016-02-04 16:46     ` Rafael J. Wysocki
2016-02-05  2:59       ` Viresh Kumar
2016-02-05  3:06         ` Rafael J. Wysocki
2016-02-05  3:15           ` Rafael J. Wysocki
2016-02-05  3:17             ` Rafael J. Wysocki
2016-02-05  3:24               ` Viresh Kumar
2016-02-05  3:33                 ` Rafael J. Wysocki
2016-02-05  3:22           ` Viresh Kumar
2016-02-03 23:22 ` [PATCH 3/11] cpufreq: governor: Use common global_dbs_data pointer Rafael J. Wysocki
2016-02-04  1:11   ` Saravana Kannan
2016-02-04  1:25     ` Rafael J. Wysocki
2016-02-04  1:40       ` Saravana Kannan [this message]
2016-02-04  5:38       ` Viresh Kumar
2016-02-04  1:47     ` Saravana Kannan
2016-02-04  5:36   ` Viresh Kumar
     [not found]     ` <CAHZ_5WxJSDtFyFdCc-D2=HSaPON=3rzUxpxPYsCyZvrV1Nv3qw@mail.gmail.com>
2016-02-04  8:25       ` Viresh Kumar
2016-02-04 11:31         ` Gautham R Shenoy
2016-02-04 11:35           ` Viresh Kumar
2016-02-04 16:52     ` Rafael J. Wysocki
2016-02-05  3:02       ` Viresh Kumar
2016-02-05  3:10         ` Rafael J. Wysocki
2016-02-03 23:29 ` [PATCH 4/11] cpufreq: governor: Avoid passing dbs_data pointers around unnecessarily Rafael J. Wysocki
2016-02-04  1:37   ` Saravana Kannan
2016-02-03 23:31 ` [PATCH 5/11] cpufreq: governor: Put governor structure into common_dbs_data Rafael J. Wysocki
2016-02-04  1:57   ` Saravana Kannan
2016-02-03 23:32 ` [PATCH 6/11] cpufreq: governor: Rename some data types and variables Rafael J. Wysocki
2016-02-03 23:33 ` [PATCH 7/11] cpufreq: governor: Rework cpufreq_governor_dbs() Rafael J. Wysocki
2016-02-04  2:03   ` Saravana Kannan
2016-02-03 23:35 ` [PATCH 8/11] cpufreq: governor: Drop the gov pointer from struct dbs_data Rafael J. Wysocki
2016-02-03 23:35 ` [PATCH 9/11] cpufreq: governor: Rename cpu_common_dbs_info to policy_dbs_info Rafael J. Wysocki
2016-02-03 23:37 ` [PATCH 10/11] cpufreq: governor: Rearrange governor data structures Rafael J. Wysocki
2016-02-03 23:38 ` [PATCH 11/11] cpufreq: governor: Drop cpu argument from dbs_check_cpu() Rafael J. Wysocki
2016-02-04  5:40 ` [PATCH 0/11] cpufreq: governor: ondemand/conservative data structures rework Viresh Kumar
2016-02-04 17:22   ` Rafael J. Wysocki
2016-02-05  2:07 ` [PATCH v2 0/10] " Rafael J. Wysocki
2016-02-05  2:11   ` [PATCH v2 1/10] cpufreq: Clean up default and fallback governor setup Rafael J. Wysocki
2016-02-10  5:15     ` Gautham R Shenoy
2016-02-10  5:48       ` Gautham R Shenoy
2016-02-05  2:14   ` [PATCH v2 2/10] cpufreq: governor: Use common mutex for dbs_data protection Rafael J. Wysocki
2016-02-05  6:53     ` Viresh Kumar
2016-02-05 22:59       ` Rafael J. Wysocki
2016-02-07  9:31         ` Viresh Kumar
2016-02-07 14:33           ` Rafael J. Wysocki
2016-02-05  2:15   ` [PATCH v2 3/10] cpufreq: governor: Avoid passing dbs_data pointers around unnecessarily Rafael J. Wysocki
2016-02-05  7:09     ` Viresh Kumar
2016-02-05  2:16   ` [PATCH v2 4/10] cpufreq: governor: Put governor structure into common_dbs_data Rafael J. Wysocki
2016-02-05  7:13     ` Viresh Kumar
2016-02-05  2:17   ` [PATCH v2 5/10] cpufreq: governor: Rename some data types and variables Rafael J. Wysocki
2016-02-05  7:17     ` Viresh Kumar
2016-02-05  2:18   ` [PATCH v2 6/10] cpufreq: governor: Rework cpufreq_governor_dbs() Rafael J. Wysocki
2016-02-05  8:14     ` Viresh Kumar
2016-02-05  2:19   ` [PATCH v2 7/10] cpufreq: governor: Drop the gov pointer from struct dbs_data Rafael J. Wysocki
2016-02-05  8:28     ` Viresh Kumar
2016-02-05  2:20   ` [PATCH v2 8/10] cpufreq: governor: Rename cpu_common_dbs_info to policy_dbs_info Rafael J. Wysocki
2016-02-05  8:34     ` Viresh Kumar
2016-02-05 22:50       ` Rafael J. Wysocki
2016-02-06 12:48     ` [PATCH v3 " Rafael J. Wysocki
2016-02-07  9:31       ` Viresh Kumar
2016-02-05  2:21   ` [PATCH v2 9/10] cpufreq: governor: Rearrange governor data structures Rafael J. Wysocki
2016-02-05  9:13     ` Viresh Kumar
2016-02-05 22:47       ` Rafael J. Wysocki
2016-02-07  9:29         ` Viresh Kumar
2016-02-07 14:34           ` Rafael J. Wysocki
2016-02-05  2:21   ` [PATCH v2 10/10] cpufreq: governor: Drop cpu argument from dbs_check_cpu() Rafael J. Wysocki
2016-02-05  9:15     ` Viresh Kumar
2016-02-06 12:50     ` [PATCH v3 " Rafael J. Wysocki
2016-02-07  9:32       ` Viresh Kumar
2016-02-06 12:44   ` [PATCH v2 0/10] cpufreq: governor: ondemand/conservative data structures rework Rafael J. Wysocki
2016-02-07 15:22   ` [PATCH 0/3] cpufreq: governor: Data structure rearrangement Rafael J. Wysocki
2016-02-07 15:23     ` [PATCH 1/3] cpufreq: governor: Simplify cpufreq_governor_limits() Rafael J. Wysocki
2016-02-07 15:40       ` Viresh Kumar
2016-02-08  0:59         ` Rafael J. Wysocki
2016-02-07 15:24     ` [PATCH 2/3] cpufreq: governor: Rearrange governor data structures Rafael J. Wysocki
2016-02-07 15:45       ` Viresh Kumar
2016-02-07 15:54         ` Viresh Kumar
2016-02-07 15:55       ` Viresh Kumar
2016-02-07 15:25     ` [PATCH 3/3] cpufreq: governor: Symmetrize cpu_dbs_info initialization and cleanup Rafael J. Wysocki
2016-02-07 15:52       ` 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=56B2AC08.7060006@codeaurora.org \
    --to=skannan@codeaurora.org \
    --cc=juri.lelli@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=steve.muckle@linaro.org \
    --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 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).