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>
73 lines
2.2 KiB
Diff
73 lines
2.2 KiB
Diff
From: Miroslav Lichvar <mlichvar@redhat.com>
|
|
Date: Mon, 31 May 2021 11:07:53 +0200
|
|
Subject: [PATCH 02/67] clock: Reset clock check on best clock/port change.
|
|
|
|
Reset the clock check when the best clock or port changes, together with
|
|
the other state like current estimated delay and frequency. This avoids
|
|
false positives if the clock is controlled by an external process when
|
|
not synchronized by PTP (e.g. phc2sys -rr).
|
|
|
|
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
|
|
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
|
[commit 262a49b07eaccc0f0237e3cd4df01b185b8f664f upstream]
|
|
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
|
|
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
|
|
---
|
|
clock.c | 2 ++
|
|
clockcheck.c | 9 ++++++++-
|
|
clockcheck.h | 6 ++++++
|
|
3 files changed, 16 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/clock.c b/clock.c
|
|
index 96453f4..437cd1c 100644
|
|
--- a/clock.c
|
|
+++ b/clock.c
|
|
@@ -1859,6 +1859,8 @@ static void handle_state_decision_event(struct clock *c)
|
|
|
|
if (!cid_eq(&best_id, &c->best_id) || best != c->best) {
|
|
clock_freq_est_reset(c);
|
|
+ if (c->sanity_check)
|
|
+ clockcheck_reset(c->sanity_check);
|
|
tsproc_reset(c->tsproc, 1);
|
|
if (!tmv_is_zero(c->initial_delay))
|
|
tsproc_set_delay(c->tsproc, c->initial_delay);
|
|
diff --git a/clockcheck.c b/clockcheck.c
|
|
index d48a578..d0b4714 100644
|
|
--- a/clockcheck.c
|
|
+++ b/clockcheck.c
|
|
@@ -47,9 +47,16 @@ struct clockcheck *clockcheck_create(int freq_limit)
|
|
if (!cc)
|
|
return NULL;
|
|
cc->freq_limit = freq_limit;
|
|
+ clockcheck_reset(cc);
|
|
+ return cc;
|
|
+}
|
|
+
|
|
+void clockcheck_reset(struct clockcheck *cc)
|
|
+{
|
|
+ cc->freq_known = 0;
|
|
cc->max_freq = -CHECK_MAX_FREQ;
|
|
cc->min_freq = CHECK_MAX_FREQ;
|
|
- return cc;
|
|
+ cc->last_ts = 0;
|
|
}
|
|
|
|
int clockcheck_sample(struct clockcheck *cc, uint64_t ts)
|
|
diff --git a/clockcheck.h b/clockcheck.h
|
|
index 78aca48..1ff86eb 100644
|
|
--- a/clockcheck.h
|
|
+++ b/clockcheck.h
|
|
@@ -33,6 +33,12 @@ struct clockcheck;
|
|
*/
|
|
struct clockcheck *clockcheck_create(int freq_limit);
|
|
|
|
+/**
|
|
+ * Reset a clock check.
|
|
+ * @param cc Pointer to a clock check obtained via @ref clockcheck_create().
|
|
+ */
|
|
+void clockcheck_reset(struct clockcheck *cc);
|
|
+
|
|
/**
|
|
* Perform the sanity check on a time stamp.
|
|
* @param cc Pointer to a clock check obtained via @ref clockcheck_create().
|