The PTP_CLOCK_GETCAPS ioctl call in phc_ctl has a conditional check for
whether to report the caps.adjust_phase bit. This is always set for both
PTP_CLOCK_GETCAPS and PTP_CLOCK_GETCAPS2, and was always zero before the
bit was moved from being reserved to indicate the adjust_phase.

In some sense if we lack PTP_CLOCK_GETCAPS2 we know the kernel won't report
adjust_phase, but in reality such kernel versions did not have
adjust_phase at all.

There's no reason to make this check against PTP_CLOCK_GETCAPS2. Instead,
scan the ptp_clock.h header file and check if we have adjust_phase support.
Use this new flag instead of PTP_CLOCK_GETCAPS2.

Signed-off-by: Jacob Keller <jacob.e.kel...@intel.com>
---
Checking against PTP_CLOCK_GETCAPS2 is wrong because this is not when the
adjust_phase was actually introduced. A direct check against whats in the
header is more accurate.

 incdefs.sh | 5 +++++
 phc_ctl.c  | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/incdefs.sh b/incdefs.sh
index 21333e5109e9..a9e94f777f6b 100755
--- a/incdefs.sh
+++ b/incdefs.sh
@@ -63,6 +63,7 @@ kernel_flags()
 {
        prefix=""
        tstamp=/usr/include/linux/net_tstamp.h
+       ptp_clock=/usr/include/linux/ptp_clock.h
 
        if [ "x$KBUILD_OUTPUT" != "x" ]; then
                # With KBUILD_OUTPUT set, we are building against
@@ -90,6 +91,10 @@ kernel_flags()
        if grep -q SOF_TIMESTAMPING_BIND_PHC ${prefix}${tstamp}; then
                printf " -DHAVE_VCLOCKS"
        fi
+
+       if grep -q adjust_phase ${prefix}${ptp_clock}; then
+               printf " -DHAVE_PTP_CAPS_ADJUST_PHASE"
+       fi
 }
 
 flags="$(user_flags)$(kernel_flags)"
diff --git a/phc_ctl.c b/phc_ctl.c
index 92e597c40a23..6a5c2f43d7c9 100644
--- a/phc_ctl.c
+++ b/phc_ctl.c
@@ -311,7 +311,7 @@ static int do_caps(clockid_t clkid, int cmdc, char *cmdv[])
                caps.n_pins,
                caps.pps ? "has" : "doesn't have",
                caps.cross_timestamping ? "has" : "doesn't have",
-               #ifdef PTP_CLOCK_GETCAPS2
+               #ifdef HAVE_PTP_CAPS_ADJUST_PHASE
                caps.adjust_phase ? "has" : "doesn't have"
                #else
                "no information regarding"
-- 
2.38.1.420.g319605f8f00e



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to