]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ptp: Allow exposing cycles only for clocks with free-running counter
authorCarolina Jubran <cjubran@nvidia.com>
Wed, 29 Oct 2025 08:38:13 +0000 (10:38 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 31 Oct 2025 23:27:40 +0000 (16:27 -0700)
The PTP core falls back to gettimex64 and getcrosststamp when
getcycles64 or getcyclesx64 are not implemented. This causes the CYCLES
ioctls to retrieve PHC real time instead of free-running cycles.

Reject PTP_SYS_OFFSET_{PRECISE,EXTENDED}_CYCLES for clocks without
free-running counter support since the result would represent PHC real
time and system time rather than cycles and system time.

Fixes: faf23f54d366 ("ptp: Add ioctl commands to expose raw cycle counter values")
Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251029083813.2276997-1-cjubran@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/ptp/ptp_chardev.c

index 8106eb617c8c4f9568b22730c8e96286147350f8..c61cf9edac48b85f6ed509a496ca525b97731b46 100644 (file)
@@ -561,10 +561,14 @@ long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd,
                return ptp_mask_en_single(pccontext->private_clkdata, argptr);
 
        case PTP_SYS_OFFSET_PRECISE_CYCLES:
+               if (!ptp->has_cycles)
+                       return -EOPNOTSUPP;
                return ptp_sys_offset_precise(ptp, argptr,
                                              ptp->info->getcrosscycles);
 
        case PTP_SYS_OFFSET_EXTENDED_CYCLES:
+               if (!ptp->has_cycles)
+                       return -EOPNOTSUPP;
                return ptp_sys_offset_extended(ptp, argptr,
                                               ptp->info->getcyclesx64);
        default: