Clang produces the following warning vers/thermal/rcar_gen3_thermal.c:147:33: warning: shifting a negative signed value is undefined [-Wshift-negative-value] / (ptat[0] - ptat[2])) + FIXPT_INT(TJ_3); ^~~~~~~~~~~~~~~ drivers/thermal/rcar_gen3_thermal.c:126:29 note: expanded from macro 'FIXPT_INT' #define FIXPT_INT(_x) ((_x) << FIXPT_SHIFT) ~~~~ ^ drivers/thermal/rcar_gen3_thermal.c:150:18: warning: shifting a negative signed value is undefined [-Wshift-negative-value] tsc->tj_t - FIXPT_INT(TJ_3)); ~~~~~~~~~~~~^~~~~~~~~~~~~~~~
Upon further investigating it looks like there is no real reason for TJ_3 to be -41. Usages subtract -41, code would be cleaner to just add. Fixes: 4eb39f79ef44 ("thermal: rcar_gen3_thermal: Update value of Tj_1") Cc: clang-built-li...@googlegroups.com Link: https://github.com/ClangBuiltLinux/linux/issues/531 Signed-off-by: Nathan Huckleberry <nh...@google.com> --- drivers/thermal/rcar_gen3_thermal.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c index a56463308694..f4b4558c08e9 100644 --- a/drivers/thermal/rcar_gen3_thermal.c +++ b/drivers/thermal/rcar_gen3_thermal.c @@ -131,7 +131,7 @@ static inline void rcar_gen3_thermal_write(struct rcar_gen3_thermal_tsc *tsc, #define RCAR3_THERMAL_GRAN 500 /* mili Celsius */ /* no idea where these constants come from */ -#define TJ_3 -41 +#define TJ_3 41 static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc, int *ptat, const int *thcode, @@ -144,11 +144,11 @@ static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc, * the dividend (4095 * 4095 << 14 > INT_MAX) so keep it unscaled */ tsc->tj_t = (FIXPT_INT((ptat[1] - ptat[2]) * 157) - / (ptat[0] - ptat[2])) + FIXPT_INT(TJ_3); + / (ptat[0] - ptat[2])) - FIXPT_INT(TJ_3); tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]), - tsc->tj_t - FIXPT_INT(TJ_3)); - tsc->coef.b1 = FIXPT_INT(thcode[2]) - tsc->coef.a1 * TJ_3; + tsc->tj_t + FIXPT_INT(TJ_3)); + tsc->coef.b1 = FIXPT_INT(thcode[2]) + tsc->coef.a1 * TJ_3; tsc->coef.a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]), tsc->tj_t - FIXPT_INT(ths_tj_1)); -- 2.22.0.rc2.383.gf4fbbf30c2-goog