From: Javi Merino <javi.merino@arm.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Zhang Rui <rui.zhang@intel.com>,
Eduardo Valentin <edubezval@gmail.com>,
Daniel Kurtz <djkurtz@chromium.org>
Subject: Re: [PATCH] thermal: avoid division by zero in power allocator
Date: Thu, 1 Oct 2015 11:17:00 +0100 [thread overview]
Message-ID: <20151001101659.GA2817@e104805> (raw)
In-Reply-To: <20150929133330.809e7058004395e6db79dec1@linux-foundation.org>
On Tue, Sep 29, 2015 at 09:33:30PM +0100, Andrew Morton wrote:
> On Mon, 28 Sep 2015 23:28:34 +0200 Andrea Arcangeli <aarcange@redhat.com> wrote:
>
> > During boot I get a div by zero Oops regression starting in v4.3-rc3.
> >
> > ...
> >
> > --- a/drivers/thermal/power_allocator.c
> > +++ b/drivers/thermal/power_allocator.c
> > @@ -144,6 +144,16 @@ static void estimate_pid_constants(struct thermal_zone_device *tz,
> > switch_on_temp = 0;
> >
> > temperature_threshold = control_temp - switch_on_temp;
> > + /*
> > + * estimate_pid_constants() tries to find appropriate default
> > + * values for thermal zones that don't provide them. If a
> > + * system integrator has configured a thermal zone with two
> > + * passive trip points at the same temperature, that person
> > + * hasn't put any effort to set up the thermal zone properly
> > + * so just give up.
> > + */
> > + if (!temperature_threshold)
> > + return;
> >
> > if (!tz->tzp->k_po || force)
> > tz->tzp->k_po = int_to_frac(sustainable_power) /
>
> a) Are we sure this won't leave tz->tzp fields uninitialized?
They will be all zeros. That's good enough.
> b) I'm not understanding that code at all. The "proportional" term
> in a PID controller is supposed to be proportional to the (desired -
> actual) difference (aka "the error").
>
> But estimate_pid_constants() appears to be setting the
> "proportional" term to be proportional to 1/error!
estimate_pid_constants() calculate the constants that you use in the
PID algorithm. Say:
k_p * error + k_i * integral_of_error + k_d * diff_of_error
This code is calculating a reasonable k_p, k_i and k_d when they are
not provided by the platform.
> Maybe a description of local `temperature_threshold' would help
> clue me in.
The `error' in the above definition is:
target_temperature - current_temperature
whereas `temperature_threshold' is:
`target_temperature' - `switch_on_temperature'
`switch_on_temperature' is the temperature above which the thermal
governor starts operating and throttling cpus (or whatever cooling
device is configured).
The `switch_on_temperature' and `target_temperature' are defined using
trip points. A platform that sets two trip points to the same
temperature is not properly configured. With Andrea's patch we
provide degraded behavior instead of crashing. I agree with that
approach (hence my Reviewed-by, maybe it should be an Acked-by?).
Cheers,
Javi
prev parent reply other threads:[~2015-10-01 10:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-28 21:28 [PATCH] thermal: avoid division by zero in power allocator Andrea Arcangeli
2015-09-28 21:28 ` Andrea Arcangeli
2015-09-29 20:33 ` Andrew Morton
2015-10-01 10:17 ` Javi Merino [this message]
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=20151001101659.GA2817@e104805 \
--to=javi.merino@arm.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=djkurtz@chromium.org \
--cc=edubezval@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rui.zhang@intel.com \
/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.