Message ID | 1447044542-30859-7-git-send-email-wxt@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Caesar, On Mon, Nov 09, 2015 at 12:48:58PM +0800, Caesar Wang wrote: > As Temperature is currently represented as int not long in the thermal > framework since use int intead of unsigned long/long to represent > temperature to avoid bogus overheat detection when negative temperature > reported. > > Signed-off-by: Caesar Wang <wxt@rock-chips.com> > > --- > > Changes in v4: > - fix the warning from the print message. > > Changes in v3: > - As the Patch v2 comments, Add a new patch to fix it. > > Changes in v2: None > Changes in v1: None > > drivers/thermal/rockchip_thermal.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c > index 7c5b784..73d47f8 100644 > --- a/drivers/thermal/rockchip_thermal.c > +++ b/drivers/thermal/rockchip_thermal.c > @@ -88,7 +88,7 @@ struct rockchip_tsadc_chip { > int chn_num; > > /* The hardware-controlled tshut property */ > - long tshut_temp; > + int tshut_temp; > enum tshut_mode tshut_mode; > enum tshut_polarity tshut_polarity; > ... > @@ -126,7 +126,7 @@ struct rockchip_thermal_data { > > void __iomem *regs; > > - long tshut_temp; > + int tshut_temp; FYI, this change is triggering a new warning in Coverity, below: > enum tshut_mode tshut_mode; > enum tshut_polarity tshut_polarity; > }; ... > @@ -477,7 +477,7 @@ static int rockchip_configure_from_dt(struct device *dev, > } > > if (thermal->tshut_temp > INT_MAX) { CID 1341498: Integer handling issues (CONSTANT_EXPRESSION_RESULT) "thermal->tshut_temp > 2147483647 /* (int)(~0U >> 1) */" is always false regardless of the values of its operands. This occurs as the logical operand of if. I don't think this condition is even useful any more, so maybe we should just kill the 'if' block. > - dev_err(dev, "Invalid tshut temperature specified: %ld\n", > + dev_err(dev, "Invalid tshut temperature specified: %d\n", > thermal->tshut_temp); > return -ERANGE; > } Brian
Hi Caesar, On Thu, Dec 03, 2015 at 08:42:38AM +0800, Caesar Wang wrote: > ? 2015?12?03? 02:38, Brian Norris ??: > > [.....] > > if (thermal->tshut_temp > INT_MAX) { > > CID 1341498: Integer handling issues (CONSTANT_EXPRESSION_RESULT) > > "thermal->tshut_temp > 2147483647 /* (int)(~0U >> 1) */" is always false regardless of the values of its operands. This occurs as the logical operand of if. > > > >I don't think this condition is even useful any more, so maybe we should > >just kill the 'if' block. > > See the patch to fix > it.----->(https://patchwork.kernel.org/patch/7720601/) > <https://patchwork.kernel.org/patch/7720601/> - if (thermal->tshut_temp > INT_MAX) { + if (!(thermal->tshut_temp < INT_MAX)) { Huh? That still doesn't make much sense. The condition is still impossible, since thermal->tshut_temp is an int. You've just made it slightly harder for static analyzers to notice the impossibility. > This patch is merged into kernel 4.4-rc3. No it isn't, and I'm glad. The patch is silly. Brian
Hi Brain, ? 2015?12?03? 08:49, Brian Norris ??: > Hi Caesar, > > On Thu, Dec 03, 2015 at 08:42:38AM +0800, Caesar Wang wrote: >> ? 2015?12?03? 02:38, Brian Norris ??: >> >> [.....] >>> if (thermal->tshut_temp > INT_MAX) { >>> CID 1341498: Integer handling issues (CONSTANT_EXPRESSION_RESULT) >>> "thermal->tshut_temp > 2147483647 /* (int)(~0U >> 1) */" is always false regardless of the values of its operands. This occurs as the logical operand of if. >>> >>> I don't think this condition is even useful any more, so maybe we should >>> just kill the 'if' block. >> See the patch to fix >> it.----->(https://patchwork.kernel.org/patch/7720601/) >> <https://patchwork.kernel.org/patch/7720601/> > - if (thermal->tshut_temp > INT_MAX) { > + if (!(thermal->tshut_temp < INT_MAX)) { > > Huh? That still doesn't make much sense. The condition is still > impossible, since thermal->tshut_temp is an int. You've just made it > slightly harder for static analyzers to notice the impossibility. Okay, that's possible remove this condition as you said. - if (thermal->tshut_temp > INT_MAX) { - dev_err(dev, "Invalid tshut temperature specified: %d\n", - thermal->tshut_temp); - return -ERANGE; - } Thanks! > >> This patch is merged into kernel 4.4-rc3. > No it isn't, and I'm glad. The patch is silly. > > Brian > > >
diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c index 7c5b784..73d47f8 100644 --- a/drivers/thermal/rockchip_thermal.c +++ b/drivers/thermal/rockchip_thermal.c @@ -88,7 +88,7 @@ struct rockchip_tsadc_chip { int chn_num; /* The hardware-controlled tshut property */ - long tshut_temp; + int tshut_temp; enum tshut_mode tshut_mode; enum tshut_polarity tshut_polarity; @@ -101,7 +101,7 @@ struct rockchip_tsadc_chip { int (*get_temp)(struct chip_tsadc_table table, int chn, void __iomem *reg, int *temp); void (*set_tshut_temp)(struct chip_tsadc_table table, - int chn, void __iomem *reg, long temp); + int chn, void __iomem *reg, int temp); void (*set_tshut_mode)(int chn, void __iomem *reg, enum tshut_mode m); /* Per-table methods */ @@ -126,7 +126,7 @@ struct rockchip_thermal_data { void __iomem *regs; - long tshut_temp; + int tshut_temp; enum tshut_mode tshut_mode; enum tshut_polarity tshut_polarity; }; @@ -160,7 +160,7 @@ struct rockchip_thermal_data { struct tsadc_table { u32 code; - long temp; + int temp; }; static const struct tsadc_table v2_code_table[] = { @@ -202,7 +202,7 @@ static const struct tsadc_table v2_code_table[] = { }; static u32 rk_tsadcv2_temp_to_code(struct chip_tsadc_table table, - long temp) + int temp) { int high, low, mid; @@ -356,7 +356,7 @@ static int rk_tsadcv2_get_temp(struct chip_tsadc_table table, } static void rk_tsadcv2_tshut_temp(struct chip_tsadc_table table, - int chn, void __iomem *regs, long temp) + int chn, void __iomem *regs, int temp) { u32 tshut_value, val; @@ -469,7 +469,7 @@ static int rockchip_configure_from_dt(struct device *dev, if (of_property_read_u32(np, "rockchip,hw-tshut-temp", &shut_temp)) { dev_warn(dev, - "Missing tshut temp property, using default %ld\n", + "Missing tshut temp property, using default %d\n", thermal->chip->tshut_temp); thermal->tshut_temp = thermal->chip->tshut_temp; } else { @@ -477,7 +477,7 @@ static int rockchip_configure_from_dt(struct device *dev, } if (thermal->tshut_temp > INT_MAX) { - dev_err(dev, "Invalid tshut temperature specified: %ld\n", + dev_err(dev, "Invalid tshut temperature specified: %d\n", thermal->tshut_temp); return -ERANGE; }
As Temperature is currently represented as int not long in the thermal framework since use int intead of unsigned long/long to represent temperature to avoid bogus overheat detection when negative temperature reported. Signed-off-by: Caesar Wang <wxt@rock-chips.com> --- Changes in v4: - fix the warning from the print message. Changes in v3: - As the Patch v2 comments, Add a new patch to fix it. Changes in v2: None Changes in v1: None drivers/thermal/rockchip_thermal.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)