On 10/5/2022 11:38 PM, Miroslav Lichvar wrote:
> Some ancient kernels had a bug in reading of the clock frequency, which
> was worked around by commit da347d7a36f2 ("ptp4l: Set clock frequency on
> start").

Is it worth spelling out what kernel version this was fixed in?

> 
> Drop this workaround and support for the old kernels to make
> clockadj_get_freq() useful.
> 
> Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
> ---
>  clock.c   | 7 -------
>  phc2sys.c | 4 ----
>  ts2phc.c  | 7 -------
>  3 files changed, 18 deletions(-)
> 
> diff --git a/clock.c b/clock.c
> index d37bb87..46ac9c2 100644
> --- a/clock.c
> +++ b/clock.c
> @@ -1144,12 +1144,6 @@ struct clock *clock_create(enum clock_type type, 
> struct config *config,
>  
>       if (c->clkid != CLOCK_INVALID) {
>               fadj = (int) clockadj_get_freq(c->clkid);
> -             /* Due to a bug in older kernels, the reading may silently fail
> -                and return 0. Set the frequency back to make sure fadj is
> -                the actual frequency of the clock. */
> -             if (!c->free_running) {
> -                     clockadj_set_freq(c->clkid, fadj);
> -             }
>               /* Disable write phase mode if not implemented by driver */
>               if (c->write_phase_mode && !phc_has_writephase(c->clkid)) {
>                       pr_err("clock does not support write phase mode");
> @@ -1755,7 +1749,6 @@ int clock_switch_phc(struct clock *c, int phc_index)
>               return -1;
>       }
>       fadj = (int) clockadj_get_freq(clkid);
> -     clockadj_set_freq(clkid, fadj);
>       servo = servo_create(c->config, c->servo_type, -fadj, max_adj, 0);
>       if (!servo) {
>               pr_err("Switching PHC, failed to create clock servo");
> diff --git a/phc2sys.c b/phc2sys.c
> index 8d2624f..ebc43e5 100644
> --- a/phc2sys.c
> +++ b/phc2sys.c
> @@ -128,10 +128,6 @@ static struct servo *servo_add(struct phc2sys_private 
> *priv,
>  
>       clockadj_init(clock->clkid);
>       ppb = clockadj_get_freq(clock->clkid);
> -     /* The reading may silently fail and return 0, reset the frequency to
> -        make sure ppb is the actual frequency of the clock. */
> -     if (!priv->free_running)
> -             clockadj_set_freq(clock->clkid, ppb);
>       if (clock->clkid == CLOCK_REALTIME) {
>               sysclk_set_leap(0);
>               max_ppb = sysclk_max_freq();
> diff --git a/ts2phc.c b/ts2phc.c
> index f7a57e4..f345370 100644
> --- a/ts2phc.c
> +++ b/ts2phc.c
> @@ -129,13 +129,6 @@ static struct servo *ts2phc_servo_create(struct 
> ts2phc_private *priv,
>       int fadj, max_adj;
>  
>       fadj = (int) clockadj_get_freq(clock->clkid);
> -     /* Due to a bug in older kernels, the reading may silently fail
> -      * and return 0. Set the frequency back to make sure fadj is
> -      * the actual frequency of the clock.
> -      */
> -     if (!clock->no_adj) {
> -             clockadj_set_freq(clock->clkid, fadj);
> -     }
>  
>       max_adj = phc_max_adj(clock->clkid);
>  


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

Reply via email to