Move the measurements and updates of clocks from do_loop() to separate function.
Signed-off-by: Miroslav Lichvar <mlich...@redhat.com> --- phc2sys.c | 100 +++++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/phc2sys.c b/phc2sys.c index d0f5adb..c1a1c6c 100644 --- a/phc2sys.c +++ b/phc2sys.c @@ -703,14 +703,63 @@ static int update_needed(struct clock *c) return 0; } -static int do_loop(struct domain *domain) +static int update_domain_clocks(struct domain *domain) { - struct timespec interval; + int64_t offset, delay; struct clock *clock; uint64_t ts; - int64_t offset, delay; int err; + LIST_FOREACH(clock, &domain->dst_clocks, dst_list) { + if (!update_needed(clock)) + continue; + + /* don't try to synchronize the clock to itself */ + if (clock->clkid == domain->src_clock->clkid || + (clock->phc_index >= 0 && + clock->phc_index == domain->src_clock->phc_index) || + !strcmp(clock->device, domain->src_clock->device)) + continue; + + if (clock->clkid == CLOCK_REALTIME && + domain->src_clock->sysoff_method >= 0) { + /* use sysoff */ + err = sysoff_measure(CLOCKID_TO_FD(domain->src_clock->clkid), + domain->src_clock->sysoff_method, + domain->phc_readings, + &offset, &ts, &delay); + } else if (domain->src_clock->clkid == CLOCK_REALTIME && + clock->sysoff_method >= 0) { + /* use reversed sysoff */ + err = sysoff_measure(CLOCKID_TO_FD(clock->clkid), + clock->sysoff_method, + domain->phc_readings, + &offset, &ts, &delay); + if (!err) { + offset = -offset; + ts += offset; + } + } else { + /* use phc */ + err = clockadj_compare(domain->src_clock->clkid, + clock->clkid, + domain->phc_readings, + &offset, &ts, &delay); + } + if (err == -EBUSY) + continue; + if (err) + return -1; + update_clock(domain, clock, offset, ts, delay); + } + + return 0; +} + +static int do_loop(struct domain *domain) +{ + struct timespec interval; + interval.tv_sec = domain->phc_interval; interval.tv_nsec = (domain->phc_interval - interval.tv_sec) * 1e9; @@ -731,49 +780,8 @@ static int do_loop(struct domain *domain) } if (!domain->src_clock) continue; - - LIST_FOREACH(clock, &domain->dst_clocks, dst_list) { - if (!update_needed(clock)) - continue; - - /* don't try to synchronize the clock to itself */ - if (clock->clkid == domain->src_clock->clkid || - (clock->phc_index >= 0 && - clock->phc_index == domain->src_clock->phc_index) || - !strcmp(clock->device, domain->src_clock->device)) - continue; - - if (clock->clkid == CLOCK_REALTIME && - domain->src_clock->sysoff_method >= 0) { - /* use sysoff */ - err = sysoff_measure(CLOCKID_TO_FD(domain->src_clock->clkid), - domain->src_clock->sysoff_method, - domain->phc_readings, - &offset, &ts, &delay); - } else if (domain->src_clock->clkid == CLOCK_REALTIME && - clock->sysoff_method >= 0) { - /* use reversed sysoff */ - err = sysoff_measure(CLOCKID_TO_FD(clock->clkid), - clock->sysoff_method, - domain->phc_readings, - &offset, &ts, &delay); - if (!err) { - offset = -offset; - ts += offset; - } - } else { - /* use phc */ - err = clockadj_compare(domain->src_clock->clkid, - clock->clkid, - domain->phc_readings, - &offset, &ts, &delay); - } - if (err == -EBUSY) - continue; - if (err) - return -1; - update_clock(domain, clock, offset, ts, delay); - } + if (update_domain_clocks(domain)) + return -1; } return 0; } -- 2.40.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel