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

Reply via email to