integ/base/linuxptp/debian/patches/0022-pmc_agent-Simplify-logic-in-update-method.patch
Andre Mauricio Zelak 4a94f788a4 Select the clock matching requirements
Fix clock selection algorithm behavior where a clock source starts
to match requirements but is not selected because it has the same
ha_priority than active.

In a HA configuration with two or more clocks configured with equal
ha_priority if no clock source matches the requirements the first one
in the configuration file is selected active. This is a standard
behavior to always have a clock source, even when they are not
synchronized.

When one of the clock sources starts to match the requirements it
must be selected active, regardless of the priority.

But when a second clock source starts to match the requirements and
has the same ha_priority as the active, the active remains the clock
source. There is no need to switch active when they have equal
ha_priority.

Test plan: two sources with the same priority
PASS: Verify a clock source is selected active when it starts to match
the requirements and the current active doesn't match them, even if
they have equal ha_priority.
PASS: Verify a clock source isn't selected active when it starts to
match the requirements and the current active also matches them.

Regression: two sources with different priority
PASS: Verify a clock source is selected active when it starts to match
the requirements and the current active doesn't match them, even if
their ha_priority is lower than the actives.
PASS: Verify a clock source is selected active when it starts to match
the requirements and the current active also matches them but has
lower ha_priority configured.
PASS: Verify a clock source isn't selected active when it starts to
match the requirements and the current active also matches them
and has higher ha_priority configured.

Story: 2010723
Task: 48699

Change-Id: If80532b7b8febcc164f7c748a8d4122b4f10fd3b
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
2023-09-05 11:26:10 -03:00

46 lines
1.4 KiB
Diff

From 731e8938953e56578007a679dbaa29e9471650ac 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/50] 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.25.1