integ/base/linuxptp/debian/patches/0052-Command-valid-sources.patch
Cole Walker aca42c6d4c Implement logic to skip updates with offset spike in ts2phc.
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>
2024-04-01 14:53:06 -04:00

70 lines
2.1 KiB
Diff

From 2f4339ab555fdd90d5c5fd11296d5c17b19c37e3 Mon Sep 17 00:00:00 2001
From: Andre Mauricio Zelak <andre.zelak@windriver.com>
Date: Wed, 30 Aug 2023 15:43:42 -0300
Subject: [PATCH 52/58] Command 'valid sources'
The 'valid sources' command is used to get a list of interfaces which
the clock is matching the requirements. The response contains a space
separated list of interfaces, or "None" when not a single clock is
matching all the requirements.
Test plan: valid sources command
PASS: Verify that a space separated list of interface is returned when
one or more clocks match the requirements.
PASS: Verify that the string "None" is returned when not a single clock
match the requirements.
Story: 2010723
Task: 48702
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
---
phc2sys.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/phc2sys.c b/phc2sys.c
index 27ba630..9893675 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -1499,6 +1499,27 @@ static int ha_handle_disable_source_msg(struct phc2sys_private *priv,
return curlen;
}
+static int ha_handle_valid_sources_msg(struct phc2sys_private *priv,
+ struct config *cfg, char *response, size_t resplen)
+{
+ size_t curlen = 0;
+ struct clock *clock = NULL;
+
+ LIST_FOREACH(clock, &priv->clocks, list) {
+ if (clock_match_ha_requirements(clock, cfg)) {
+ curlen += snprintf(response + curlen, resplen - curlen,
+ "%s ", clock->device);
+ }
+ }
+
+ /* no clock is matching requirements */
+ if (0 == curlen) {
+ curlen = snprintf(response, resplen, "None");
+ }
+
+ return curlen;
+}
+
static int ha_com_socket_handle_msg(struct phc2sys_private *priv,
struct config *cfg)
{
@@ -1567,6 +1588,9 @@ static int ha_com_socket_handle_msg(struct phc2sys_private *priv,
} else if (starts_with("disable source", buffer)) {
cnt = ha_handle_disable_source_msg(priv, cfg, buffer, response,
HA_SCK_BUFFER_SIZE);
+ } else if (strcmp((const char*)buffer, "valid sources") == 0) {
+ cnt = ha_handle_valid_sources_msg(priv, cfg, response,
+ HA_SCK_BUFFER_SIZE);
} else {
cnt = snprintf((char*)response, HA_SCK_BUFFER_SIZE,
"Error: Invalid command");
--
2.30.2