
This change allows ts2phc to be configured to ignore timing updates that have a large offset spike in order to mitigate the resulting timing skew. In some circumstances on realtime systems with high CPU load, the timestamp consumed by ts2phc can be delayed in reaching ts2phc and results in the offset calculation attempting to speed the clock up by a large margin. This change causes ts2phc to ignore updates that would greatly skew the clock when ts2phc is already in a synchronized state. The global configuration option "max_phc_update_skip_cnt" is provided to allow users to specify how many consecutive offset spike incidents will be ignored before adjusting the clock. The default value is 120. The behaviour can be disabled by setting max_phc_update_skip_cnt to 0. This code is ported from a proposed upstream patch found here: https://sourceforge.net/p/linuxptp/mailman/message/44114092/ Test-plan: Pass: Verify linuxptp package build Pass: Deploy ts2phc binary and verify system time sync Pass: Manually trigger offset spike and verify that ts2phc maintains stable time sync Closes-bug: https://bugs.launchpad.net/starlingx/+bug/2059955 Change-Id: I13cd5c3440682ec9256e11449fe62d5fe28f66fa Signed-off-by: Cole Walker <cole.walker@windriver.com>
46 lines
1.4 KiB
Diff
46 lines
1.4 KiB
Diff
From f692885fbb0e1a1a379314b08d3108c1e54d3f4f Mon Sep 17 00:00:00 2001
|
|
From: Andre Mauricio Zelak <andre.zelak@windriver.com>
|
|
Date: Mon, 12 Jun 2023 15:18:36 -0300
|
|
Subject: [PATCH 22/58] pmc_agent: Simplify logic in update method.
|
|
|
|
If the pmc pointer is not set, then there is no need to read the time only
|
|
to later discard the result. This patch simplifies the flow by returning
|
|
early if there is no work to be done.
|
|
|
|
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
|
|
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
|
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
|
|
|
[commit 956b7eeb8247e3f0658b1205dfd3bea3e1011ee2 upstream]
|
|
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
|
|
---
|
|
pmc_agent.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/pmc_agent.c b/pmc_agent.c
|
|
index dd509af..f30f174 100644
|
|
--- a/pmc_agent.c
|
|
+++ b/pmc_agent.c
|
|
@@ -342,14 +342,16 @@ int update_pmc_node(struct pmc_agent *node)
|
|
struct timespec tp;
|
|
uint64_t ts;
|
|
|
|
+ if (!node->pmc) {
|
|
+ return 0;
|
|
+ }
|
|
if (clock_gettime(CLOCK_MONOTONIC, &tp)) {
|
|
pr_err("failed to read clock: %m");
|
|
return -1;
|
|
}
|
|
ts = tp.tv_sec * NS_PER_SEC + tp.tv_nsec;
|
|
|
|
- if (node->pmc &&
|
|
- !(ts > node->pmc_last_update &&
|
|
+ if (!(ts > node->pmc_last_update &&
|
|
ts - node->pmc_last_update < PMC_UPDATE_INTERVAL)) {
|
|
if (node->stay_subscribed) {
|
|
renew_subscription(node, 0);
|
|
--
|
|
2.30.2
|
|
|