All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthias Kaehlcke <mka@chromium.org>
To: Chanwoo Choi <cw00.choi@samsung.com>
Cc: MyungJoo Ham <myungjoo.ham@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Brian Norris <briannorris@chromium.org>,
	Douglas Anderson <dianders@chromium.org>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	"Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Viresh Kumar <viresh.kumar@linaro.org>,
	Lee Jones <lee.jones@linaro.org>,
	Benson Leung <bleung@chromium.org>,
	Olof Johansson <olof@lixom.net>
Subject: Re: [PATCH v5 05/12] PM / devfreq: Add support for policy notifiers
Date: Fri, 6 Jul 2018 10:53:01 -0700	[thread overview]
Message-ID: <20180706175301.GG129942@google.com> (raw)
In-Reply-To: <5B3C6C2A.1070205@samsung.com>

Hi Chanwoo,

On Wed, Jul 04, 2018 at 03:41:46PM +0900, Chanwoo Choi wrote:

> Firstly,
> I'm not sure why devfreq needs the devfreq_verify_within_limits() function.
> 
> devfreq already used the OPP interface as default. It means that
> the outside of 'drivers/devfreq' can disable/enable the frequency
> such as drivers/thermal/devfreq_cooling.c. Also, when some device
> drivers disable/enable the specific frequency, the devfreq core
> consider them.
> 
> So, devfreq doesn't need to devfreq_verify_within_limits() because
> already support some interface to change the minimum/maximum frequency
> of devfreq device. 
> 
> In case of cpufreq subsystem, cpufreq only provides 'cpufreq_verify_with_limits()'
> to change the minimum/maximum frequency of cpu. some device driver cannot
> change the minimum/maximum frequency through OPP interface.
> 
> But, in case of devfreq subsystem, as I explained already, devfreq support
> the OPP interface as default way. devfreq subsystem doesn't need to add
> other way to change the minimum/maximum frequency.

Using the OPP interface exclusively works as long as a
enabling/disabling of OPPs is limited to a single driver
(drivers/thermal/devfreq_cooling.c). When multiple drivers are
involved you need a way to resolve conflicts, that's the purpose of
devfreq_verify_within_limits(). Please let me know if there are
existing mechanisms for conflict resolution that I overlooked.

Possibly drivers/thermal/devfreq_cooling.c could be migrated to use
devfreq_verify_within_limits() instead of the OPP interface if
desired, however this seems beyond the scope of this series.

> Secondly,
> This patch send the 'struct devfreq_policy' instance as the data
> when sending the notification as following:
> 
> 	srcu_notifier_call_chain(&devfreq->policy_notifier_list,
> 			DEVFREQ_ADJUST, policy);
> 
> But, I think that if devfreq core sends the 'struct devfreq_freq_limits'
> instance instead of 'struct devfreq_policy', it is enough.
> Because receiver of DEVFREQ_ADJUST just will use the min_freq/max_freq variables.
> 
> So, I tried to find the cpufreq's case. The some device drivers using
> CPUFREQ_POLICY_NOTIFIER uses following variables of 'struct cpufreq_policy'.
> It means that receiver of CPUFREQ_POLICY_NOTIFIER don't need to other
> information/variables except for min/max frequency.
> 
> - policy->min
> - policy->max
> - policy->cpuinfo.max_freq
> - policy->cpuinfo.min_freq
> - policy->cpu : not related to devfreq)
> - policy->related_cpus : not related to devfreq)
> 
> - list of device drivers using CPUFREQ_POLICY_NOTIFIER (linux kernel is v4.18-rc1)
> $ grep -rn "CPUFREQ_POLICY_NOTIFIER" .
> ./drivers/macintosh/windfarm_cpufreq_clamp.c
> ./drivers/thermal/cpu_cooling.c
> ./drivers/thermal/cpu_cooling.c
> ./drivers/acpi/processor_thermal.c
> ./drivers/acpi/processor_thermal.c
> ./drivers/acpi/processor_perflib.c
> ./drivers/acpi/processor_perflib.c
> ./drivers/base/arch_topology.c
> ./drivers/base/arch_topology.c
> ./drivers/video/fbdev/sa1100fb.c
> ./drivers/video/fbdev/pxafb.c
> ./drivers/cpufreq/ppc_cbe_cpufreq_pmi.c
> ./drivers/cpufreq/cpufreq.c
> ./drivers/cpufreq/cpufreq.c
> ./drivers/cpufreq/cpufreq.c
> ./drivers/cpufreq/cpufreq.c

Thanks for your investigation.

I decided to mirror the cpufreq interface for consistency, but I agree
that 'struct devfreq_freq_limits' could be passed instead of the
policy object. I'm fine with changing that.

> On 2018년 07월 04일 08:46, Matthias Kaehlcke wrote:
> > Policy notifiers are called before a frequency change and may narrow
> > the min/max frequency range in devfreq_policy, which is used to adjust
> > the target frequency if it is beyond this range.
> > 
> > Also add a few helpers:
> >  - devfreq_verify_within_[dev_]limits()
> >     - should be used by the notifiers for policy adjustments.
> >  - dev_to_devfreq()
> >     - lookup a devfreq strict from a device pointer
> > 
> > Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> > Reviewed-by: Brian Norris <briannorris@chromium.org>
> > ---
> > Changes in v5:
> > - none
> > 
> > Changes in v4:
> > - Fixed typo in commit message: devfreg => devfreq
> > - added 'Reviewed-by: Brian Norris <briannorris@chromium.org>' tag
> > 
> > Changes in v3:
> > - devfreq.h: fixed misspelling of struct devfreq_policy
> > 
> > Changes in v2:
> > - performance, powersave and simpleondemand governors don't need changes
> >   with "PM / devfreq: Don't adjust to user limits in governors"
> > - formatting fixes
> > ---
> >  drivers/devfreq/devfreq.c | 48 ++++++++++++++++++++++-------
> >  include/linux/devfreq.h   | 65 +++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 102 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
> > index 21604d6ae2b8..4cbaa7ad1972 100644
> > --- a/drivers/devfreq/devfreq.c
> > +++ b/drivers/devfreq/devfreq.c
> > @@ -72,6 +72,21 @@ static struct devfreq *find_device_devfreq(struct device *dev)
> >  	return ERR_PTR(-ENODEV);
> >  }
> >  
> > +/**
> > + * dev_to_devfreq() - find devfreq struct using device pointer
> > + * @dev:	device pointer used to lookup device devfreq.
> > + */
> > +struct devfreq *dev_to_devfreq(struct device *dev)
> > +{
> > +	struct devfreq *devfreq;
> > +
> > +	mutex_lock(&devfreq_list_lock);
> > +	devfreq = find_device_devfreq(dev);
> > +	mutex_unlock(&devfreq_list_lock);
> > +
> > +	return devfreq;
> > +}
> > +
> >  static unsigned long find_available_min_freq(struct devfreq *devfreq)
> >  {
> >  	struct dev_pm_opp *opp;
> > @@ -269,20 +284,21 @@ int update_devfreq(struct devfreq *devfreq)
> >  	if (!policy->governor)
> >  		return -EINVAL;
> >  
> > +	policy->min = policy->devinfo.min_freq;
> > +	policy->max = policy->devinfo.max_freq;
> 
> Why don't you consider 'policy->user.max/min_freq' as following?
> As I already commented, I think that 'struct devfreq_freq_limits' is enough
> instead of 'struct devfreq_policy'.
> 
> 	->max_freq = MIN(policy->devinfo.max_freq, policy->user.max_freq);
> 	->min_freq = MAX(policy->devinfo.min_freq, policy->user.min_freq);

You mean limiting the frequency range with user.min/max before
DEVFREQ_ADJUST instead of adjusting it afterwards? That's fine with
me.

Thanks

Matthias

  reply	other threads:[~2018-07-06 17:53 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 23:46 [PATCH v5 00/12] Add throttler driver for non-thermal throttling Matthias Kaehlcke
2018-07-03 23:46 ` [PATCH v5 01/12] PM / devfreq: Init user limits from OPP limits, not viceversa Matthias Kaehlcke
2018-07-03 23:46 ` [PATCH v5 02/12] PM / devfreq: Fix handling of min/max_freq == 0 Matthias Kaehlcke
2018-07-04  2:20   ` Chanwoo Choi
2018-07-06 16:36     ` Matthias Kaehlcke
2018-07-12  8:34       ` Chanwoo Choi
2018-07-03 23:46 ` [PATCH v5 03/12] PM / devfreq: Don't adjust to user limits in governors Matthias Kaehlcke
2018-07-04  2:27   ` Chanwoo Choi
2018-08-02 23:36   ` Matthias Kaehlcke
2018-08-03  0:03     ` Chanwoo Choi
2018-08-03  0:24       ` Matthias Kaehlcke
2018-08-03  0:43         ` Chanwoo Choi
2018-07-03 23:46 ` [PATCH v5 04/12] PM / devfreq: Add struct devfreq_policy Matthias Kaehlcke
2018-07-04  2:51   ` Chanwoo Choi
2018-07-06 17:07     ` Matthias Kaehlcke
2018-07-12  8:38       ` Chanwoo Choi
2018-08-03  0:04         ` Chanwoo Choi
2018-07-03 23:46 ` [PATCH v5 05/12] PM / devfreq: Add support for policy notifiers Matthias Kaehlcke
2018-07-04  6:41   ` Chanwoo Choi
2018-07-06 17:53     ` Matthias Kaehlcke [this message]
2018-07-12  8:44       ` Chanwoo Choi
2018-07-16 17:50         ` Matthias Kaehlcke
2018-07-31 19:39           ` Matthias Kaehlcke
2018-08-01  1:22             ` Chanwoo Choi
2018-08-01 17:08               ` Matthias Kaehlcke
2018-08-02  1:58                 ` Chanwoo Choi
2018-08-02 23:13                   ` Matthias Kaehlcke
2018-08-02 23:48                     ` Matthias Kaehlcke
2018-08-03  0:14                       ` Chanwoo Choi
2018-08-06 19:21                         ` Matthias Kaehlcke
2018-08-06 22:31                           ` Chanwoo Choi
2018-08-06 22:50                             ` Chanwoo Choi
2018-08-07  0:23                             ` Matthias Kaehlcke
2018-08-07  1:35                               ` Chanwoo Choi
2018-08-07 22:34                                 ` Matthias Kaehlcke
2018-08-02 23:56                     ` Chanwoo Choi
2018-08-06 18:46                       ` Matthias Kaehlcke
2018-08-06 22:16                         ` Chanwoo Choi
2018-07-03 23:46 ` [PATCH v5 06/12] PM / devfreq: Make update_devfreq() public Matthias Kaehlcke
2018-08-01  8:32   ` Chanwoo Choi
2018-07-03 23:47 ` [PATCH v5 07/12] PM / devfreq: export devfreq_class Matthias Kaehlcke
2018-07-04  5:30   ` Chanwoo Choi
2018-07-06 18:09     ` Matthias Kaehlcke
2018-07-12  9:08       ` Chanwoo Choi
2018-07-16 19:41         ` Matthias Kaehlcke
2018-07-31 19:29           ` Matthias Kaehlcke
2018-08-01  8:18             ` Chanwoo Choi
2018-08-01 17:18               ` Matthias Kaehlcke
2018-07-03 23:47 ` [PATCH v5 08/12] cpufreq: Add stub for cpufreq_update_policy() Matthias Kaehlcke
2018-07-04 10:41   ` Rafael J. Wysocki
2018-07-10 22:24     ` Matthias Kaehlcke
2018-07-04 10:44   ` Viresh Kumar
2018-07-03 23:47 ` [PATCH v5 09/12] dt-bindings: misc: add bindings for throttler Matthias Kaehlcke
2018-07-04 10:00   ` Viresh Kumar
2018-07-04 10:00     ` Viresh Kumar
2018-08-01  8:27   ` Chanwoo Choi
2018-08-01 17:39     ` Matthias Kaehlcke
2018-07-03 23:47 ` [PATCH v5 10/12] misc: throttler: Add core support for non-thermal throttling Matthias Kaehlcke
2018-07-03 23:47 ` [PATCH v5 11/12] misc: throttler: Add Chrome OS EC throttler Matthias Kaehlcke
2018-07-03 23:47 ` [PATCH v5 12/12] mfd: cros_ec: Add throttler sub-device Matthias Kaehlcke
2018-07-04  7:59   ` Lee Jones
     [not found] ` <CGME20180703234727epcas3p1b9f4a41b1f1714c8c059100d46b816dd@epcms1p5>
2018-07-04  2:24   ` [PATCH v5 01/12] PM / devfreq: Init user limits from OPP limits, not viceversa MyungJoo Ham
2018-07-04  2:24     ` MyungJoo Ham

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=20180706175301.GG129942@google.com \
    --to=mka@chromium.org \
    --cc=arnd@arndb.de \
    --cc=bleung@chromium.org \
    --cc=briannorris@chromium.org \
    --cc=cw00.choi@samsung.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dianders@chromium.org \
    --cc=enric.balletbo@collabora.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kyungmin.park@samsung.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=myungjoo.ham@samsung.com \
    --cc=olof@lixom.net \
    --cc=rjw@rjwysocki.net \
    --cc=robh+dt@kernel.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 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.