Re: [Linuxptp-devel] [PATCH v2 2/3] clock: Reset clock check on best clock/port change.

2021-05-26 Thread Keller, Jacob E



> -Original Message-
> From: Miroslav Lichvar 
> Sent: Wednesday, May 26, 2021 1:24 AM
> To: linuxptp-devel@lists.sourceforge.net
> Subject: [Linuxptp-devel] [PATCH v2 2/3] clock: Reset clock check on best
> clock/port change.
> 
> Reset the clock check when the best clock or port changes, together with
> the other state like current estimated delay and frequency. This avoids
> false positives if the clock is controlled by an external process when
> not synchronized by PTP (e.g. phc2sys -rr).
> 

Thanks! The intent is more clear now!

Reviewed-by: Jacob Keller 

> Signed-off-by: Miroslav Lichvar 
> ---
>  clock.c  | 2 ++
>  clockcheck.c | 9 -
>  clockcheck.h | 6 ++
>  3 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/clock.c b/clock.c
> index a073575..2dd7ef9 100644
> --- a/clock.c
> +++ b/clock.c
> @@ -1949,6 +1949,8 @@ static void handle_state_decision_event(struct clock
> *c)
> 
>   if (!cid_eq(_id, >best_id) || best != c->best) {
>   clock_freq_est_reset(c);
> + if (c->sanity_check)
> + 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


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


[Linuxptp-devel] [PATCH v2 2/3] clock: Reset clock check on best clock/port change.

2021-05-26 Thread Miroslav Lichvar
Reset the clock check when the best clock or port changes, together with
the other state like current estimated delay and frequency. This avoids
false positives if the clock is controlled by an external process when
not synchronized by PTP (e.g. phc2sys -rr).

Signed-off-by: Miroslav Lichvar 
---
 clock.c  | 2 ++
 clockcheck.c | 9 -
 clockcheck.h | 6 ++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/clock.c b/clock.c
index a073575..2dd7ef9 100644
--- a/clock.c
+++ b/clock.c
@@ -1949,6 +1949,8 @@ static void handle_state_decision_event(struct clock *c)
 
if (!cid_eq(_id, >best_id) || best != c->best) {
clock_freq_est_reset(c);
+   if (c->sanity_check)
+   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