integ/base/linuxptp/debian/patches/0015-pmc_agent-Rename-pmc_node-to-something-more-descript.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

213 lines
6.9 KiB
Diff

From 77a246c6d6a865f11fe2fac14cdc9fa2746a06a2 Mon Sep 17 00:00:00 2001
From: Andre Mauricio Zelak <andre.zelak@windriver.com>
Date: Mon, 12 Jun 2023 14:47:36 -0300
Subject: [PATCH 15/58] pmc_agent: Rename pmc_node to something more
descriptive.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
[commit bb6865cdf59572fcb09c11d549828269281c6841 upstream]
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
---
phc2sys.c | 4 ++--
pmc_agent.c | 26 +++++++++++++-------------
pmc_agent.h | 26 +++++++++++++-------------
3 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/phc2sys.c b/phc2sys.c
index 648ba61..74ee9d1 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -103,7 +103,7 @@ struct phc2sys_private {
int forced_sync_offset;
int kernel_leap;
int state_changed;
- struct pmc_node node;
+ struct pmc_agent node;
LIST_HEAD(port_head, port) ports;
LIST_HEAD(clock_head, clock) clocks;
LIST_HEAD(dst_clock_head, clock) dst_clocks;
@@ -813,7 +813,7 @@ static int clock_compute_state(struct phc2sys_private *priv,
#define node_to_phc2sys(node) \
container_of(node, struct phc2sys_private, node)
-static int phc2sys_recv_subscribed(struct pmc_node *node,
+static int phc2sys_recv_subscribed(struct pmc_agent *node,
struct ptp_message *msg, int excluded)
{
struct phc2sys_private *priv = node_to_phc2sys(node);
diff --git a/pmc_agent.c b/pmc_agent.c
index 774e94d..e83895c 100644
--- a/pmc_agent.c
+++ b/pmc_agent.c
@@ -32,7 +32,7 @@
* renewed.
*/
-static void send_subscription(struct pmc_node *node)
+static void send_subscription(struct pmc_agent *node)
{
struct subscribe_events_np sen;
@@ -42,7 +42,7 @@ static void send_subscription(struct pmc_node *node)
pmc_send_set_action(node->pmc, TLV_SUBSCRIBE_EVENTS_NP, &sen, sizeof(sen));
}
-static int check_clock_identity(struct pmc_node *node, struct ptp_message *msg)
+static int check_clock_identity(struct pmc_agent *node, struct ptp_message *msg)
{
if (!node->clock_identity_set)
return 1;
@@ -98,7 +98,7 @@ static int get_mgt_err_id(struct ptp_message *msg)
* -1: error reported by the other side
* -2: local error, fatal
*/
-static int run_pmc(struct pmc_node *node, int timeout, int ds_id,
+static int run_pmc(struct pmc_agent *node, int timeout, int ds_id,
struct ptp_message **msg)
{
#define N_FD 1
@@ -166,7 +166,7 @@ static int run_pmc(struct pmc_node *node, int timeout, int ds_id,
}
}
-int run_pmc_wait_sync(struct pmc_node *node, int timeout)
+int run_pmc_wait_sync(struct pmc_agent *node, int timeout)
{
struct ptp_message *msg;
Enumeration8 portState;
@@ -192,7 +192,7 @@ int run_pmc_wait_sync(struct pmc_node *node, int timeout)
}
}
-int run_pmc_get_utc_offset(struct pmc_node *node, int timeout)
+int run_pmc_get_utc_offset(struct pmc_agent *node, int timeout)
{
struct ptp_message *msg;
int res;
@@ -222,7 +222,7 @@ int run_pmc_get_utc_offset(struct pmc_node *node, int timeout)
return 1;
}
-int run_pmc_get_number_ports(struct pmc_node *node, int timeout)
+int run_pmc_get_number_ports(struct pmc_agent *node, int timeout)
{
struct ptp_message *msg;
int res;
@@ -238,7 +238,7 @@ int run_pmc_get_number_ports(struct pmc_node *node, int timeout)
return res;
}
-int run_pmc_subscribe(struct pmc_node *node, int timeout)
+int run_pmc_subscribe(struct pmc_agent *node, int timeout)
{
struct ptp_message *msg;
int res;
@@ -250,14 +250,14 @@ int run_pmc_subscribe(struct pmc_node *node, int timeout)
return 1;
}
-void run_pmc_events(struct pmc_node *node)
+void run_pmc_events(struct pmc_agent *node)
{
struct ptp_message *msg;
run_pmc(node, 0, -1, &msg);
}
-int run_pmc_port_properties(struct pmc_node *node, int timeout,
+int run_pmc_port_properties(struct pmc_agent *node, int timeout,
unsigned int port, int *state,
int *tstamping, char *iface)
{
@@ -294,7 +294,7 @@ out:
return res;
}
-int run_pmc_clock_identity(struct pmc_node *node, int timeout)
+int run_pmc_clock_identity(struct pmc_agent *node, int timeout)
{
struct ptp_message *msg;
struct defaultDS *dds;
@@ -313,7 +313,7 @@ int run_pmc_clock_identity(struct pmc_node *node, int timeout)
}
/* Returns: -1 in case of error, 0 otherwise */
-int update_pmc_node(struct pmc_node *node, int subscribe)
+int update_pmc_node(struct pmc_agent *node, int subscribe)
{
struct timespec tp;
uint64_t ts;
@@ -336,7 +336,7 @@ int update_pmc_node(struct pmc_node *node, int subscribe)
return 0;
}
-int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
+int init_pmc_node(struct config *cfg, struct pmc_agent *node, const char *uds,
pmc_node_recv_subscribed_t *recv_subscribed)
{
node->pmc = pmc_create(cfg, TRANS_UDS, uds, 0,
@@ -351,7 +351,7 @@ int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
return 0;
}
-void close_pmc_node(struct pmc_node *node)
+void close_pmc_node(struct pmc_agent *node)
{
if (!node->pmc)
return;
diff --git a/pmc_agent.h b/pmc_agent.h
index 90245b1..10ef4b5 100644
--- a/pmc_agent.h
+++ b/pmc_agent.h
@@ -24,13 +24,13 @@
#include "pmc_common.h"
-struct pmc_node;
+struct pmc_agent;
-typedef int pmc_node_recv_subscribed_t(struct pmc_node *node,
+typedef int pmc_node_recv_subscribed_t(struct pmc_agent *agent,
struct ptp_message *msg,
int excluded);
-struct pmc_node {
+struct pmc_agent {
struct pmc *pmc;
int pmc_ds_requested;
uint64_t pmc_last_update;
@@ -42,19 +42,19 @@ struct pmc_node {
pmc_node_recv_subscribed_t *recv_subscribed;
};
-int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
+int init_pmc_node(struct config *cfg, struct pmc_agent *agent, const char *uds,
pmc_node_recv_subscribed_t *recv_subscribed);
-void close_pmc_node(struct pmc_node *node);
-int update_pmc_node(struct pmc_node *node, int subscribe);
-int run_pmc_subscribe(struct pmc_node *node, int timeout);
-int run_pmc_clock_identity(struct pmc_node *node, int timeout);
-int run_pmc_wait_sync(struct pmc_node *node, int timeout);
-int run_pmc_get_number_ports(struct pmc_node *node, int timeout);
-void run_pmc_events(struct pmc_node *node);
-int run_pmc_port_properties(struct pmc_node *node, int timeout,
+void close_pmc_node(struct pmc_agent *agent);
+int update_pmc_node(struct pmc_agent *agent, int subscribe);
+int run_pmc_subscribe(struct pmc_agent *agent, int timeout);
+int run_pmc_clock_identity(struct pmc_agent *agent, int timeout);
+int run_pmc_wait_sync(struct pmc_agent *agent, int timeout);
+int run_pmc_get_number_ports(struct pmc_agent *agent, int timeout);
+void run_pmc_events(struct pmc_agent *agent);
+int run_pmc_port_properties(struct pmc_agent *agent, int timeout,
unsigned int port, int *state,
int *tstamping, char *iface);
-int run_pmc_get_utc_offset(struct pmc_node *node, int timeout);
+int run_pmc_get_utc_offset(struct pmc_agent *agent, int timeout);
int get_mgt_id(struct ptp_message *msg);
void *get_mgt_data(struct ptp_message *msg);
--
2.30.2