When pm timer expires, the collected data should be stored in recordlist. Signed-off-by: Anders Selhammer <anders.selham...@est.tech> --- clock.c | 15 ++++++++++++++- port.c | 19 +++++++++++++++++++ port.h | 18 +++++++++++++++++- port_private.h | 1 + 4 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/clock.c b/clock.c index 6575130..37959e7 100644 --- a/clock.c +++ b/clock.c @@ -173,20 +173,33 @@ static void clock_set_pmtime(struct clock *c) static void clock_handle_pm_err(struct clock *c) { + struct port *p; + clock_clr_tmo(c->pm_fd); pm_free_clock_recordlist(&c->pm_recordlist); + LIST_FOREACH(p, &c->ports, list) { + port_free_pm_recordlist(p); + } c->performance_monitoring = 0; } static void clock_pm_event(struct clock *c) { - clock_set_pm_tmo(c); + struct port *p; + clock_set_pm_tmo(c); if (pm_update_clock_stats_recordlist(&c->pm_stats_record, &c->pm_recordlist)) { pr_err("update of pm recordlist for clock failed"); goto err; } + LIST_FOREACH(p, &c->ports, list) { + if (port_update_pm_recordlist(p, c->pm_stats_record.cycle_index)) { + pr_err("update of pm recordlist for port: %d failed", + port_number(p)); + goto err; + } + } clock_set_pmtime(c); return; diff --git a/port.c b/port.c index f46c1ae..da3305a 100644 --- a/port.c +++ b/port.c @@ -62,6 +62,24 @@ void port_set_pmtime(struct port *p, PMTimestamp pmtime) p->pm_counter_record.head.PMTime = pmtime; } +void port_free_pm_recordlist(struct port *p) +{ + pm_free_port_recordlist(&p->pm_recordlist); +} + +int port_update_pm_recordlist(struct port *p, int ci) +{ + if (pm_update_port_stats_recordlist(&p->pm_stats_record, + &p->pm_recordlist, ci)) { + return -1; + } + if (pm_update_port_counters_recordlist(&p->pm_counter_record, + &p->pm_recordlist, ci)) { + return -1; + } + return 0; +} + static int announce_compare(struct ptp_message *m1, struct ptp_message *m2) { struct announce_msg *a = &m1->announce, *b = &m2->announce; @@ -2228,6 +2246,7 @@ void port_close(struct port *p) close(p->fault_fd); } pm_destroy_port_stats(&p->pm_stats_record); + pm_free_port_recordlist(&p->pm_recordlist); free(p); } diff --git a/port.h b/port.h index 6af0ecf..edd66f1 100644 --- a/port.h +++ b/port.h @@ -37,12 +37,28 @@ struct port; /** * Set the pm timestamp for the current port pm data. * - * @param port A port instance. + * @param p A port instance. * @param pmtime Current pm timestamp. */ void port_set_pmtime(struct port *p, PMTimestamp pmtime); /** + * Free all memory in the recordlist for the port. + * + * @param p A port instance. + */ +void port_free_pm_recordlist(struct port *p); + +/** + * Updates the recordlist for the port. + * + * @param p A port instance. + * @param ci Cycle index for the pm. + * @return Zero on success, non-zero otherwise. + */ +int port_update_pm_recordlist(struct port *p, int ci); + +/** * Returns the dataset from a port's best foreign clock record, if any * has yet been discovered. This function does not bring the returned * dataset up to date, so the caller should invoke port_compute_best() diff --git a/port_private.h b/port_private.h index ae03509..d61c676 100644 --- a/port_private.h +++ b/port_private.h @@ -124,6 +124,7 @@ struct port { /* performance monitoring */ struct pm_port_stats pm_stats_record; struct pm_port_counters pm_counter_record; + struct pm_port_recordlist pm_recordlist; }; #define portnum(p) (p->portIdentity.portNumber) -- 1.8.3.1 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel