* [linux-next:master 16319/17742] drivers/gpu/drm/xe/xe_hwmon.c:1344 xe_hwmon_temperature_decode() warn: impossible condition '(value > ((~0 >> 1))) => (s64min-s64max > s64max)'
@ 2026-10-20 8:01 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-20 8:01 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Karthik Poosa <karthik.poosa@intel.com>
CC: Rodrigo Vivi <rodrigo.vivi@intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 3d229ce89862b8e82d71a9e11d6f840ca272a6d6
commit: 24ec15d646179a255f314e404343bf8e3200c9c0 [16319/17742] drm/xe/hwmon: Decode CRI temperature registers as IEEE-754
:::::: branch date: 14 hours ago
:::::: commit date: 5 days ago
config: x86_64-randconfig-r2202-20261019 (https://download.01.org/0day-ci/archive/20261020/202610200910.SP0zWbkd-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
rustc: rustc 1.96.0 (ac68faa20 2026-05-25)
smatch: v0.5.0-9187-g5189e3fb
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202610200910.SP0zWbkd-lkp@intel.com/
smatch warnings:
drivers/gpu/drm/xe/xe_hwmon.c:1344 xe_hwmon_temperature_decode() warn: impossible condition '(value > ((~0 >> 1))) => (s64min-s64max > s64max)'
vim +1344 drivers/gpu/drm/xe/xe_hwmon.c
24ec15d646179a Karthik Poosa 2026-10-15 1296
24ec15d646179a Karthik Poosa 2026-10-15 1297 /**
24ec15d646179a Karthik Poosa 2026-10-15 1298 * xe_hwmon_temperature_decode - Decode an IEEE-754 temperature register value
24ec15d646179a Karthik Poosa 2026-10-15 1299 * @reg_val: The raw register value to decode
24ec15d646179a Karthik Poosa 2026-10-15 1300 * @temperature: Pointer to store the decoded temperature in millidegrees Celsius.
24ec15d646179a Karthik Poosa 2026-10-15 1301 *
24ec15d646179a Karthik Poosa 2026-10-15 1302 * IEEE-754 single-precision format:
24ec15d646179a Karthik Poosa 2026-10-15 1303 *
24ec15d646179a Karthik Poosa 2026-10-15 1304 * 31 30 23 22 0
24ec15d646179a Karthik Poosa 2026-10-15 1305 * +--+-----------------------------+----------------------------+
24ec15d646179a Karthik Poosa 2026-10-15 1306 * | S| exponent | fraction |
24ec15d646179a Karthik Poosa 2026-10-15 1307 * +--+-----------------------------+----------------------------+
24ec15d646179a Karthik Poosa 2026-10-15 1308 *
24ec15d646179a Karthik Poosa 2026-10-15 1309 * value = (-1)^S * 1.fraction * 2^(exponent - 127)
24ec15d646179a Karthik Poosa 2026-10-15 1310 *
24ec15d646179a Karthik Poosa 2026-10-15 1311 * Return: 0 on success or an error if @reg_val is non-finite or cannot be
24ec15d646179a Karthik Poosa 2026-10-15 1312 * represented in millidegrees Celsius.
24ec15d646179a Karthik Poosa 2026-10-15 1313 */
24ec15d646179a Karthik Poosa 2026-10-15 1314 static int xe_hwmon_temperature_decode(u32 reg_val, long *temperature)
24ec15d646179a Karthik Poosa 2026-10-15 1315 {
24ec15d646179a Karthik Poosa 2026-10-15 1316 u32 exponent = REG_FIELD_GET(IEEE754_EXP_MASK, reg_val);
24ec15d646179a Karthik Poosa 2026-10-15 1317 u32 mantissa = REG_FIELD_GET(IEEE754_MANTISSA_MASK, reg_val);
24ec15d646179a Karthik Poosa 2026-10-15 1318 s64 value;
24ec15d646179a Karthik Poosa 2026-10-15 1319 int shift;
24ec15d646179a Karthik Poosa 2026-10-15 1320
24ec15d646179a Karthik Poosa 2026-10-15 1321 /* Exponent 0xff encodes infinity or NaN. */
24ec15d646179a Karthik Poosa 2026-10-15 1322 if (exponent == IEEE754_EXP_SPECIAL)
24ec15d646179a Karthik Poosa 2026-10-15 1323 return -EINVAL;
24ec15d646179a Karthik Poosa 2026-10-15 1324
24ec15d646179a Karthik Poosa 2026-10-15 1325 /* Subnormal values are smaller than one millidegree Celsius. */
24ec15d646179a Karthik Poosa 2026-10-15 1326 if (!exponent) {
24ec15d646179a Karthik Poosa 2026-10-15 1327 *temperature = 0;
24ec15d646179a Karthik Poosa 2026-10-15 1328 return 0;
24ec15d646179a Karthik Poosa 2026-10-15 1329 }
24ec15d646179a Karthik Poosa 2026-10-15 1330
24ec15d646179a Karthik Poosa 2026-10-15 1331 value = (s64)(mantissa | BIT(IEEE754_MANTISSA_BITS)) * MILLIDEGREE_PER_DEGREE;
24ec15d646179a Karthik Poosa 2026-10-15 1332 shift = exponent - (IEEE754_EXP_BIAS + IEEE754_MANTISSA_BITS);
24ec15d646179a Karthik Poosa 2026-10-15 1333 if (shift >= 0) {
24ec15d646179a Karthik Poosa 2026-10-15 1334 if (shift >= BITS_PER_LONG || value > (LONG_MAX >> shift))
24ec15d646179a Karthik Poosa 2026-10-15 1335 return -ERANGE;
24ec15d646179a Karthik Poosa 2026-10-15 1336 value <<= shift;
24ec15d646179a Karthik Poosa 2026-10-15 1337 } else if (shift > -64) {
24ec15d646179a Karthik Poosa 2026-10-15 1338 value >>= -shift;
24ec15d646179a Karthik Poosa 2026-10-15 1339 } else {
24ec15d646179a Karthik Poosa 2026-10-15 1340 value = 0;
24ec15d646179a Karthik Poosa 2026-10-15 1341 }
24ec15d646179a Karthik Poosa 2026-10-15 1342
24ec15d646179a Karthik Poosa 2026-10-15 1343 /* Ensure the magnitude fits in long, which is 32-bit on some arches. */
24ec15d646179a Karthik Poosa 2026-10-15 @1344 if (value > LONG_MAX)
24ec15d646179a Karthik Poosa 2026-10-15 1345 return -ERANGE;
24ec15d646179a Karthik Poosa 2026-10-15 1346
24ec15d646179a Karthik Poosa 2026-10-15 1347 if (reg_val & IEEE754_SIGN)
24ec15d646179a Karthik Poosa 2026-10-15 1348 value = -value;
24ec15d646179a Karthik Poosa 2026-10-15 1349
24ec15d646179a Karthik Poosa 2026-10-15 1350 *temperature = value;
24ec15d646179a Karthik Poosa 2026-10-15 1351 return 0;
24ec15d646179a Karthik Poosa 2026-10-15 1352 }
24ec15d646179a Karthik Poosa 2026-10-15 1353
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-20 8:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-20 8:01 [linux-next:master 16319/17742] drivers/gpu/drm/xe/xe_hwmon.c:1344 xe_hwmon_temperature_decode() warn: impossible condition '(value > ((~0 >> 1))) => (s64min-s64max > s64max)' kernel test robot
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.