Reset the clock check to avoid false positives when switching between
slave and non-slave state and the clock is controlled by an external
process (e.g. phc2sys -rr).

Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
---
 clock.c      | 1 +
 clockcheck.c | 9 ++++++++-
 clockcheck.h | 6 ++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/clock.c b/clock.c
index a073575..69f2b66 100644
--- a/clock.c
+++ b/clock.c
@@ -1949,6 +1949,7 @@ static void handle_state_decision_event(struct clock *c)
 
        if (!cid_eq(&best_id, &c->best_id) || best != c->best) {
                clock_freq_est_reset(c);
+               clockcheck_reset(c->sanity_check);
                tsproc_reset(c->tsproc, 1);
                if (!tmv_is_zero(c->initial_delay))
                        tsproc_set_delay(c->tsproc, c->initial_delay);
diff --git a/clockcheck.c b/clockcheck.c
index d48a578..d0b4714 100644
--- a/clockcheck.c
+++ b/clockcheck.c
@@ -47,9 +47,16 @@ struct clockcheck *clockcheck_create(int freq_limit)
        if (!cc)
                return NULL;
        cc->freq_limit = freq_limit;
+       clockcheck_reset(cc);
+       return cc;
+}
+
+void clockcheck_reset(struct clockcheck *cc)
+{
+       cc->freq_known = 0;
        cc->max_freq = -CHECK_MAX_FREQ;
        cc->min_freq = CHECK_MAX_FREQ;
-       return cc;
+       cc->last_ts = 0;
 }
 
 int clockcheck_sample(struct clockcheck *cc, uint64_t ts)
diff --git a/clockcheck.h b/clockcheck.h
index 78aca48..1ff86eb 100644
--- a/clockcheck.h
+++ b/clockcheck.h
@@ -33,6 +33,12 @@ struct clockcheck;
  */
 struct clockcheck *clockcheck_create(int freq_limit);
 
+/**
+ * Reset a clock check.
+ * @param cc Pointer to a clock check obtained via @ref clockcheck_create().
+ */
+void clockcheck_reset(struct clockcheck *cc);
+
 /**
  * Perform the sanity check on a time stamp.
  * @param cc Pointer to a clock check obtained via @ref clockcheck_create().
-- 
2.26.3



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

Reply via email to