From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>,
Dien Pham <dien.pham.ry@renesas.com>
Cc: "Zhang Rui" <rui.zhang@intel.com>,
"Daniel Lezcano" <daniel.lezcano@linaro.org>,
"Amit Kucheria" <amit.kucheria@verdurent.com>,
"Niklas Söderlund" <niklas.soderlund+renesas@ragnatech.se>,
"Van Do" <van.do.xw@renesas.com>,
"Linux PM list" <linux-pm@vger.kernel.org>,
Linux-Renesas <linux-renesas-soc@vger.kernel.org>
Subject: RE: [PATCH] thermal: rcar_gen3_thermal: Fix undefined temperature if negative
Date: Tue, 9 Jun 2020 02:34:20 +0000 [thread overview]
Message-ID: <TY2PR01MB36923211263DA7F54A814AF4D8820@TY2PR01MB3692.jpnprd01.prod.outlook.com> (raw)
In-Reply-To: <CAMuHMdXT0qofW38-g79TSiy1nUBhrWNPfbViKRyWSFdme=oD0g@mail.gmail.com>
Hi Geert-san,
Thank you for your comments!
> From: Geert Uytterhoeven, Sent: Monday, June 8, 2020 8:38 PM
<snip>
> > --- a/drivers/thermal/rcar_gen3_thermal.c
> > +++ b/drivers/thermal/rcar_gen3_thermal.c
> > @@ -167,7 +167,7 @@ static int rcar_gen3_thermal_get_temp(void *devdata, int *temp)
> > {
> > struct rcar_gen3_thermal_tsc *tsc = devdata;
> > int mcelsius, val;
> > - u32 reg;
> > + long reg;
>
> "long" is 64-bit, so "int" should be sufficient.
Oops.
> > /* Read register and convert to mili Celsius */
> > reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK;
>
> However, rcar_gen3_thermal_read() does return u32, so keeping u32 for
> reg looks more logical to me.
>
> Successive lines are:
>
> if (reg <= thcode[tsc->id][1])
> val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b1,
> tsc->coef.a1);
> else
> val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b2,
> tsc->coef.a2);
>
> Perhaps it's safer to add an cast to FIXPT_INT(), so it always returns
> int, and/or add casts to FIXPT_DIV(), so only signed values are passed
> to DIV_ROUND_CLOSEST?
> That would prevent the issue from reappearing later.
There is not related to the issue but, thcode[] is also int.
So, if we use casts, we will see a lot of casts like below:
---
static int rcar_gen3_thermal_get_temp(void *devdata, int *temp)
{
struct rcar_gen3_thermal_tsc *tsc = devdata;
int mcelsius, val;
u32 reg;
/* Read register and convert to mili Celsius */
reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK;
if ((int)reg <= thcode[tsc->id][1])
val = (int)FIXPT_DIV((int)FIXPT_INT(reg) - tsc->coef.b1,
tsc->coef.a1);
else
val = (int)FIXPT_DIV((int)FIXPT_INT(reg) - tsc->coef.b2,
tsc->coef.a2);
---
I'm thinking the name "reg" is not good because it should be the same type as
rcar_gen3_thermal_read(). But, if we use other name like "int ctemp;", we can use
it like below. What do you think?
---
static int rcar_gen3_thermal_get_temp(void *devdata, int *temp)
{
struct rcar_gen3_thermal_tsc *tsc = devdata;
int mcelsius, val;
int ctemp;
/* Read register and convert to mili Celsius */
ctemp = int(rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK);
if (ctemp <= thcode[tsc->id][1])
val = FIXPT_DIV(FIXPT_INT(ctemp) - tsc->coef.b1,
tsc->coef.a1);
else
val = FIXPT_DIV(FIXPT_INT(ctemp) - tsc->coef.b2,
tsc->coef.a2);
---
> BTW, rcar_gen3_thermal_mcelsius_to_temp() returns a value to store in a
> register, hence I think it should return u32 instead of int.
I think so.
Best regards,
Yoshihiro Shimoda
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
next prev parent reply other threads:[~2020-06-09 2:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-08 11:12 [PATCH] thermal: rcar_gen3_thermal: Fix undefined temperature if negative Yoshihiro Shimoda
2020-06-08 11:38 ` Geert Uytterhoeven
2020-06-09 2:34 ` Yoshihiro Shimoda [this message]
2020-06-09 7:24 ` Geert Uytterhoeven
2020-06-09 11:00 ` Yoshihiro Shimoda
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=TY2PR01MB36923211263DA7F54A814AF4D8820@TY2PR01MB3692.jpnprd01.prod.outlook.com \
--to=yoshihiro.shimoda.uh@renesas.com \
--cc=amit.kucheria@verdurent.com \
--cc=daniel.lezcano@linaro.org \
--cc=dien.pham.ry@renesas.com \
--cc=geert@linux-m68k.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=rui.zhang@intel.com \
--cc=van.do.xw@renesas.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;
as well as URLs for NNTP newsgroup(s).