From 3e79970af082ced59283fc5d5819f2337ba00372 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 3 Dec 2024 10:48:12 +0100 Subject: [PATCH] don't require -O option without -a and -w in phc2sys (RHEL-69138) Resolves: RHEL-69138 --- linuxptp-nowait.patch | 150 ++++++++++++++++++++++++++++++++++++++++++ linuxptp.spec | 2 + 2 files changed, 152 insertions(+) create mode 100644 linuxptp-nowait.patch diff --git a/linuxptp-nowait.patch b/linuxptp-nowait.patch new file mode 100644 index 0000000..3b9d189 --- /dev/null +++ b/linuxptp-nowait.patch @@ -0,0 +1,150 @@ +commit a3420abab9eec2dc7b35e0e1e9f37ebeffc87655 +Author: Miroslav Lichvar +Date: Tue Nov 26 15:10:32 2024 +0100 + + pmc_agent: Use longer update interval when not subscribed. + + When phc2sys is started with the -w option, the pmc agent is not + subscribed to events by the pmc_agent_subscribe() function, which also + sets the update interval. The update interval in this case is zero, + which means the pmc agent is trying to update the currentUtcOffset value + on every call of pmc_agent_update(), i.e. on every clock update in + phc2sys. + + Set a default update interval of 60 seconds to reduce the rate of + pmc requests. + + Fixes: e3ca7ea90a9e ("pmc_agent: Make update interval configurable.") + Signed-off-by: Miroslav Lichvar + Reviewed-by: Jacob Keller + +diff --git a/pmc_agent.c b/pmc_agent.c +index d1a3367..663adc0 100644 +--- a/pmc_agent.c ++++ b/pmc_agent.c +@@ -33,6 +33,9 @@ + #define UPDATES_PER_SUBSCRIPTION 3 + #define MIN_UPDATE_INTERVAL 10 + ++/* Update interval if the agent not subscribed, just polling the UTC offset */ ++#define DEFAULT_UPDATE_INTERVAL 60 ++ + struct pmc_agent { + struct pmc *pmc; + uint64_t pmc_last_update; +@@ -253,6 +256,7 @@ int init_pmc_node(struct config *cfg, struct pmc_agent *node, const char *uds, + } + node->recv_subscribed = recv_subscribed; + node->recv_context = context; ++ node->update_interval = DEFAULT_UPDATE_INTERVAL * NS_PER_SEC; + + return 0; + } + +commit 03ab6793abf665039b25319f0f4ad7ce03452874 +Author: Miroslav Lichvar +Date: Tue Nov 26 15:10:33 2024 +0100 + + phc2sys: Don't disable pmc agent with -s -d -w options. + + When phc2sys is started with -s and -d options to combine a PPS device + and PHC device as a time source, but without an offset specified by + the -O option, the pmc agent is disabled after waiting for ptp4l to have + a port in a synchronized state. This prevents phc2sys from following + changes in the currentUtcOffset value. + + Disable the pmc agent only if no PHC device is specified by the -s + option, i.e. there are no PHC readings to which the UTC offset could be + applied. + + Fixes: 5f1b419c4102 ("phc2sys: Replace magical test with a proper test.") + Signed-off-by: Miroslav Lichvar + Reviewed-by: Jacob Keller + +diff --git a/phc2sys.c b/phc2sys.c +index d09cb53..c98ecec 100644 +--- a/phc2sys.c ++++ b/phc2sys.c +@@ -1594,7 +1594,7 @@ int main(int argc, char *argv[]) + + if (domains[0].forced_sync_offset || + !phc2sys_using_systemclock(&domains[0]) || +- hardpps_configured(pps_fd)) { ++ (hardpps_configured(pps_fd) && !src_name)) { + pmc_agent_disable(domains[0].agent); + } + } + +commit 1e25a62e65e07f2cc9e1c390895f0a940d307a25 +Author: Miroslav Lichvar +Date: Tue Nov 26 15:10:34 2024 +0100 + + phc2sys: Don't require -O option without -a and -w. + + Allow phc2sys to be started in the static mode without the -O option, + meaning it should fetch the UTC offset from ptp4l, even if the -w option + is not included on the command line to wait for ptp4l to have a port in + the master or slave state. + + This is useful when the PHC is synchronized by ts2phc or other + application and the system clock needs to be synchronized to the PHC + even when ptp4l has all ports in the faulty state (e.g. all network + links are down). + + It's the responsibility of the user to start phc2sys when ptp4l is + already running. phc2sys will exit with an error message if it cannot + get a response with the 1-second timeout. + + Signed-off-by: Miroslav Lichvar + +diff --git a/phc2sys.8 b/phc2sys.8 +index 762a1b1..3246c8f 100644 +--- a/phc2sys.8 ++++ b/phc2sys.8 +@@ -164,7 +164,10 @@ minimize the error caused by random delays in scheduling and bus utilization. + The default is 5. + .TP + .BI \-O " offset" +-Specify the offset between the sink and source times in seconds. Not ++Specify the offset between the sink and source times in seconds. If not ++specified, the offset will be set according to the currentUtcOffset value ++obtained from ptp4l and the direction of synchronization, assuming the system ++clock is keeping time in UTC and all used PHCs keep time in TAI. Not + compatible with the + .B \-a + option. See +diff --git a/phc2sys.c b/phc2sys.c +index c98ecec..ddd0a6a 100644 +--- a/phc2sys.c ++++ b/phc2sys.c +@@ -1452,12 +1452,6 @@ int main(int argc, char *argv[]) + goto bad_usage; + } + +- if (!autocfg && !wait_sync && !settings.forced_sync_offset) { +- fprintf(stderr, +- "time offset must be specified using -w or -O\n"); +- goto bad_usage; +- } +- + if (hardpps_configured(pps_fd) && (dst_cnt != 1 || + strcmp(dst_names[0], "CLOCK_REALTIME"))) { + fprintf(stderr, +@@ -1559,7 +1553,7 @@ int main(int argc, char *argv[]) + + r = -1; + +- if (wait_sync) { ++ if (wait_sync || !domains[0].forced_sync_offset) { + snprintf(uds_local, sizeof(uds_local), + "/var/run/phc2sys.%d", getpid()); + +@@ -1574,7 +1568,7 @@ int main(int argc, char *argv[]) + phc2sys_recv_subscribed, &domains[0])) + goto end; + +- while (is_running()) { ++ while (wait_sync && is_running()) { + r = run_pmc_wait_sync(domains[0].agent, 1000); + if (r < 0) + goto end; diff --git a/linuxptp.spec b/linuxptp.spec index 2e9a6c4..351b355 100644 --- a/linuxptp.spec +++ b/linuxptp.spec @@ -31,6 +31,8 @@ Patch4: linuxptp-ucastrate.patch Patch5: linuxptp-udpaddr.patch # support static sink clocks in phc2sys automatic mode Patch6: linuxptp-staticauto.patch +# don't require -O option without -a and -w in phc2sys +Patch7: linuxptp-nowait.patch # check for EL-specific kernels with vclock support Patch12: linuxptp-vclock.patch