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