Files
integ/base/linuxptp/debian/bullseye/patches/0047-phc2sys-without-w-option.patch
Andre Mauricio Zelak 1fff0107f2 phc2sys: Downgrade log message about timeout reading pmc dds,
tpd and pds

Depending upon system load, the read pmc call can timeout. When
it happens the corresponding data set is reset, allowing the HA
algorithm to switch over the current source.

Although the read timeout is undesirable, the error message is
misleading because the failure is mitigated. Downgrade the error
message to notice to disable it in the default log level.

Test Plan:
PASS: Deploy T-BC with single PTP4L instance
 - Load system (stress -c 64 -m 5 -t 60)
   check user.log, phc2sys not showing the error message
   phc2sys: notice [1200995.017] phc-inst2 pmc agent index 0, timeout reading pmc tpd

PASS: Deploy T-BC with single PTP4L instance
 - Adjust the log to debug level
 system ptp-instance-parameter-add phc-inst2 logging_level=7
 - Load system (stress -c 64 -m 5 -t 60)
   check user.log, phc2sys eventually shows the error message
   phc2sys: notice [1215208.628] phc-inst2 pmc agent index 0, timeout reading pmc tpd

PASS: Build linuxptp package

Closes-Bug: 2132273

Change-Id: I3e05de4006c0e35b725178d9e56eaf8c72d52747
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
2025-11-25 17:07:25 -03:00

107 lines
2.9 KiB
Diff

From: Andre Mauricio Zelak <andre.zelak@windriver.com>
Date: Mon, 7 Aug 2023 18:19:37 -0300
Subject: [PATCH 47/67] phc2sys without -w option.
Fix bad clock and pmc initialization when -w command argument
is not provided.
The pmc agent must be created and mapped to a clock source even
in cases the -w (wait for ptp4l) option is not used.
Test plan:
PASS: Verify phc2sys initializes without -w argument.
PASS: Verify phc2sys initializes with two ptp4l interfaces
configured.
Reviewed-by: Cole Walker <cole.walker@windriver.com>
Reviewed-by: Andre Fernando Zanella Kantek
<andrefernandozanella.kantek@windriver.com>
[commit 10fa27f5829787c15e9ae59c45703328ca4e644f upstream]
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
---
phc2sys.c | 34 ++++++++++++++--------------------
1 file changed, 14 insertions(+), 20 deletions(-)
diff --git a/phc2sys.c b/phc2sys.c
index edc626f..065b7f0 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -2254,6 +2254,15 @@ int main(int argc, char *argv[])
if (priv.master == NULL) {
priv.master = src;
}
+ if (i > 0) {
+ node = pmc_agent_add(&priv, i);
+ if (!node)
+ goto end;
+ }
+ /* map clock to pmc agent node */
+ src->node = node;
+ pr_debug("pmc node index %d assigned to source interface %s",
+ node->index, src->device);
if (ha_enabled) {
src->ha_priority = config_get_int(cfg, src->device, "ha_priority");
}
@@ -2286,35 +2295,22 @@ int main(int argc, char *argv[])
r = -1;
if (wait_sync) {
- i = 0;
LIST_FOREACH(src, &priv.clocks, list) {
/* skip dst clock */
- if (src == dst) {
+ if (src->state == PS_MASTER)
continue;
- }
-
- if (i > 0) {
- node = pmc_agent_add(&priv, i);
- if (!node)
- goto end;
- }
/* uds local is formated '/var/run/phc2sys.<pid>.<source_interface>' */
snprintf(uds_local, sizeof(uds_local), "/var/run/phc2sys.%d.%s",
getpid(), src->device);
- if (init_pmc_node(cfg, node, uds_local,
+ if (init_pmc_node(cfg, src->node, uds_local,
phc2sys_recv_subscribed, &priv))
goto end;
- /* map clock to pmc agent node */
- src->node = node;
- pr_debug("pmc node index %d source clock %s initialized",
- node->index, src->device);
-
while (is_running()) {
- r = run_pmc_wait_sync(node, 1000);
+ r = run_pmc_wait_sync(src->node, 1000);
if (r < 0)
goto end;
if (r > 0)
@@ -2324,7 +2320,7 @@ int main(int argc, char *argv[])
}
if (!priv.forced_sync_offset) {
- r = pmc_agent_query_utc_offset(node, 1000);
+ r = pmc_agent_query_utc_offset(src->node, 1000);
if (r) {
pr_err("failed to get UTC offset");
goto end;
@@ -2334,10 +2330,8 @@ int main(int argc, char *argv[])
if (priv.forced_sync_offset ||
(src->clkid != CLOCK_REALTIME && dst->clkid != CLOCK_REALTIME) ||
src->clkid == CLOCK_INVALID) {
- pmc_agent_disable(node);
+ pmc_agent_disable(src->node);
}
-
- ++i;
}
if (ha_enabled && !priv.forced_source_clock) {