From: Lukasz Luba <lukasz.luba@arm.com>
To: Ionela Voinescu <ionela.voinescu@arm.com>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
dri-devel@lists.freedesktop.org, amit.kucheria@verdurent.com,
airlied@linux.ie, daniel.lezcano@linaro.org,
steven.price@arm.com, alyssa.rosenzweig@collabora.com,
rui.zhang@intel.com, orjan.eide@arm.com
Subject: Re: [PATCH 2/5] thermal: devfreq_cooling: get a copy of device status
Date: Thu, 22 Oct 2020 11:55:28 +0100 [thread overview]
Message-ID: <76e0ef49-5898-adbb-0c54-23d5999f4907@arm.com> (raw)
In-Reply-To: <20201007161120.GC15063@arm.com>
Hi Ionela,
On 10/7/20 5:11 PM, Ionela Voinescu wrote:
> On Monday 21 Sep 2020 at 13:20:04 (+0100), Lukasz Luba wrote:
>> Devfreq cooling needs to now the correct status of the device in order
>> to operate. Do not rely on Devfreq last_status which might be a stale data
>> and get more up-to-date values of the load.
>>
>> Devfreq framework can change the device status in the background. To
>> mitigate this situation make a copy of the status structure and use it
>> for internal calculations.
>>
>> In addition this patch adds normalization function, which also makes sure
>> that whatever data comes from the device, it is in a sane range.
>>
>> Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
>> ---
>> drivers/thermal/devfreq_cooling.c | 52 +++++++++++++++++++++++++------
>> 1 file changed, 43 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/thermal/devfreq_cooling.c b/drivers/thermal/devfreq_cooling.c
>> index 7063ccb7b86d..cf045bd4d16b 100644
>> --- a/drivers/thermal/devfreq_cooling.c
>> +++ b/drivers/thermal/devfreq_cooling.c
>> @@ -227,6 +227,24 @@ static inline unsigned long get_total_power(struct devfreq_cooling_device *dfc,
>> voltage);
>> }
>>
>> +static void _normalize_load(struct devfreq_dev_status *status)
>
> Is there a reason for the leading "_" ?
> AFAIK, "__name()" is meant to suggest a "worker" function for another
> "name()" function, but that would not apply here.
It is just a local name. Check e.g. ./drivers/opp/core.c there is a few:
_generic_set_opp_regulator(), _generic_set_opp_clk_only(),
_get_opp_count(), _find_opp_table(), _set_opp_bw(), etc.
It is just a shorter name for me, '_' means here locality.
Instead of calling it devfreq_cooling_normalize_load().
>
>> +{
>> + /* Make some space if needed */
>> + if (status->busy_time > 0xffff) {
>> + status->busy_time >>= 10;
>> + status->total_time >>= 10;
>> + }
>
> How about removing the above code and adding here:
>
> status->busy_time = status->busy_time ? : 1;
It's not equivalent. The code operates on raw device values, which
might be big (e.g. read from counters). If it's lager than the 0xffff,
it is going to be shifted to get smaller.
>
>> +
>> + if (status->busy_time > status->total_time)
>
> This check would then cover the possibility that total_time is 0.
>
>> + status->busy_time = status->total_time;
>
> But a reversal is needed here:
> status->total_time = status->busy_time;
No, I want to clamp the busy_time, which should not be bigger that
total time. It could happen when we deal with 'raw' values from device
counters.
>
>> +
>> + status->busy_time *= 100;
>> + status->busy_time /= status->total_time ? : 1;
>> +
>> + /* Avoid division by 0 */
>> + status->busy_time = status->busy_time ? : 1;
>> + status->total_time = 100;
>
> Then all of this code can be replaced by:
>
> status->busy_time = (unsigned long)div64_u64((u64)status->busy_time << 10,
> status->total_time);
> status->total_time = 1 << 10;
No, the total_time closed to 'unsigned long' would overflow.
>
> This way you gain some resolution to busy_time and the divisions in the
> callers would just become shifts by 10.
I don't want to gain more resolution here. I want to be prepare for raw
(not processed yet) big values coming from driver.
Regards,
Lukasz
>
> Hope it helps,
> Ionela.
>
next prev parent reply other threads:[~2020-10-22 10:55 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-21 12:20 [PATCH 0/5] Thermal devfreq cooling improvements with Energy Model Lukasz Luba
2020-09-21 12:20 ` [PATCH 1/5] thermal: devfreq_cooling: change tracing function and arguments Lukasz Luba
2020-09-21 12:20 ` [PATCH 2/5] thermal: devfreq_cooling: get a copy of device status Lukasz Luba
2020-10-07 16:11 ` Ionela Voinescu
2020-10-22 10:55 ` Lukasz Luba [this message]
2020-12-01 10:36 ` Ionela Voinescu
2020-12-01 12:19 ` Lukasz Luba
2020-12-01 14:55 ` Ionela Voinescu
2020-10-14 14:34 ` Daniel Lezcano
2020-10-22 11:45 ` Lukasz Luba
2020-09-21 12:20 ` [PATCH 3/5] thermal: devfreq_cooling: add new registration functions with Energy Model Lukasz Luba
2020-10-07 12:07 ` Ionela Voinescu
2020-10-22 11:17 ` Lukasz Luba
2020-12-01 14:05 ` Ionela Voinescu
2020-12-01 14:37 ` Lukasz Luba
2020-12-01 15:02 ` Ionela Voinescu
2020-09-21 12:20 ` [PATCH 4/5] thermal: devfreq_cooling: remove old power model and use EM Lukasz Luba
2020-10-07 15:12 ` Ionela Voinescu
2020-10-22 11:26 ` Lukasz Luba
2020-09-21 12:20 ` [PATCH 5/5] drm/panfrost: Register devfreq cooling and attempt to add Energy Model Lukasz Luba
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=76e0ef49-5898-adbb-0c54-23d5999f4907@arm.com \
--to=lukasz.luba@arm.com \
--cc=airlied@linux.ie \
--cc=alyssa.rosenzweig@collabora.com \
--cc=amit.kucheria@verdurent.com \
--cc=daniel.lezcano@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=ionela.voinescu@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=orjan.eide@arm.com \
--cc=rui.zhang@intel.com \
--cc=steven.price@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®