Current clockadj code only prints a message in case the kernel returns an error for a clock adjustment and prevents the higher-level code from reacting to failure.
Signed-off-by: Wojciech Wasko <wwa...@nvidia.com> --- clockadj.c | 18 +++++++++++++----- clockadj.h | 9 ++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/clockadj.c b/clockadj.c index 4c920b9..1437ec0 100644 --- a/clockadj.c +++ b/clockadj.c @@ -48,7 +48,7 @@ void clockadj_init(clockid_t clkid) #endif } -void clockadj_set_freq(clockid_t clkid, double freq) +int clockadj_set_freq(clockid_t clkid, double freq) { struct timex tx; memset(&tx, 0, sizeof(tx)); @@ -62,8 +62,11 @@ void clockadj_set_freq(clockid_t clkid, double freq) tx.modes |= ADJ_FREQUENCY; tx.freq = (long) (freq * 65.536); - if (clock_adjtime(clkid, &tx) < 0) + if (clock_adjtime(clkid, &tx) < 0) { pr_err("failed to adjust the clock: %m"); + return -1; + } + return 0; } double clockadj_get_freq(clockid_t clkid) @@ -82,7 +85,7 @@ double clockadj_get_freq(clockid_t clkid) return f; } -void clockadj_set_phase(clockid_t clkid, long offset) +int clockadj_set_phase(clockid_t clkid, long offset) { struct timex tx; memset(&tx, 0, sizeof(tx)); @@ -91,10 +94,12 @@ void clockadj_set_phase(clockid_t clkid, long offset) tx.offset = offset; if (clock_adjtime(clkid, &tx) < 0) { pr_err("failed to set the clock offset: %m"); + return -1; } + return 0; } -void clockadj_step(clockid_t clkid, int64_t step) +int clockadj_step(clockid_t clkid, int64_t step) { struct timex tx; int sign = 1; @@ -114,8 +119,11 @@ void clockadj_step(clockid_t clkid, int64_t step) tx.time.tv_sec -= 1; tx.time.tv_usec += 1000000000; } - if (clock_adjtime(clkid, &tx) < 0) + if (clock_adjtime(clkid, &tx) < 0) { pr_err("failed to step clock: %m"); + return -1; + } + return 0; } int clockadj_max_freq(clockid_t clkid) diff --git a/clockadj.h b/clockadj.h index 6db1d79..ff5e3d5 100644 --- a/clockadj.h +++ b/clockadj.h @@ -33,8 +33,9 @@ void clockadj_init(clockid_t clkid); * Set clock's frequency offset. * @param clkid A clock ID obtained using phc_open() or CLOCK_REALTIME. * @param freq The frequency offset in parts per billion (ppb). + * @return 0 on success, -1 on failure */ -void clockadj_set_freq(clockid_t clkid, double freq); +int clockadj_set_freq(clockid_t clkid, double freq); /** * Read clock's frequency offset. @@ -47,15 +48,17 @@ double clockadj_get_freq(clockid_t clkid); * Set clock's phase offset. * @param clkid A clock ID obtained using phc_open() or CLOCK_REALTIME. * @param offset The phase offset in nanoseconds. + * @return 0 on success, -1 on failure */ -void clockadj_set_phase(clockid_t clkid, long offset); +int clockadj_set_phase(clockid_t clkid, long offset); /** * Step clock's time. * @param clkid A clock ID obtained using phc_open() or CLOCK_REALTIME. * @param step The time step in nanoseconds. + * @return 0 on success, -1 on failure */ -void clockadj_step(clockid_t clkid, int64_t step); +int clockadj_step(clockid_t clkid, int64_t step); /** * Read maximum frequency adjustment of the target clock. -- 2.25.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel