]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
hwmon: (pmbus/adm1266) seed timestamp from the real-time clock
authorAbdurrahman Hussain <abdurrahman@nexthop.ai>
Fri, 15 May 2026 22:11:47 +0000 (15:11 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Thu, 21 May 2026 13:55:34 +0000 (06:55 -0700)
adm1266_set_rtc() seeds the chip's SET_RTC register from
ktime_get_seconds(), which returns CLOCK_MONOTONIC -- i.e. seconds
since the host last booted, not seconds since the Unix epoch.

The chip stamps that value into every blackbox record it captures.
Userspace reading those timestamps back expects wall-clock seconds:
that's what the SET_RTC frame layout documents (datasheet Rev. D,
Table 84) and what every other consumer of "seconds since epoch"
assumes.  Seeding from CLOCK_MONOTONIC gives blackbox records a
timestamp that is only meaningful within a single boot of the host
and silently resets to small values on every reboot.

Switch to ktime_get_real_seconds() so the seed matches what the
register is documented to hold.

Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
Cc: stable@vger.kernel.org
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Link: https://lore.kernel.org/r/20260515-adm1266-fixes-v1-1-1c1ea1349cfe@nexthop.ai
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/pmbus/adm1266.c

index d90f8f80be8e0045dbef594612a796f24637e9d1..a86666c73a5e9c46c44bb58dd90d3639b1e83908 100644 (file)
@@ -432,7 +432,7 @@ static int adm1266_set_rtc(struct adm1266_data *data)
        char write_buf[6];
        int i;
 
-       kt = ktime_get_seconds();
+       kt = ktime_get_real_seconds();
 
        memset(write_buf, 0, sizeof(write_buf));