Miroslav Lichvar
2015-02-13 12:56:13 UTC
Signed-off-by: Miroslav Lichvar <***@redhat.com>
---
clock.c | 22 ++++++++++++++++++----
clock.h | 5 ++++-
port.c | 3 ++-
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/clock.c b/clock.c
index b841e81..9bc0352 100644
--- a/clock.c
+++ b/clock.c
@@ -108,8 +108,11 @@ struct clock {
double nrr;
tmv_t c1;
tmv_t c2;
+ tmv_t c3;
tmv_t t1;
tmv_t t2;
+ tmv_t t3;
+ tmv_t t4;
struct clock_description desc;
struct clock_stats stats;
int stats_interval;
@@ -1295,16 +1298,20 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
tmv_t c1, c2, c3, pd, t1, t2, t3, t4;
double rr;
+ c->t3 = timespec_to_tmv(req);
+ c->t4 = timestamp_to_tmv(rx);
+ c->c3 = correction_to_tmv(correction);
+
if (tmv_is_zero(c->t1))
return;
c1 = c->c1;
c2 = c->c2;
- c3 = correction_to_tmv(correction);
+ c3 = c->c3;
t1 = c->t1;
t2 = c->t2;
- t3 = timespec_to_tmv(req);
- t4 = timestamp_to_tmv(rx);
+ t3 = c->t3;
+ t4 = c->t4;
rr = clock_rate_ratio(c);
/*
@@ -1341,10 +1348,13 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
stats_add_value(c->stats.delay, tmv_to_nanoseconds(pd));
}
-void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr)
+void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx,
+ double nrr)
{
c->path_delay = ppd;
c->nrr = nrr;
+ c->t3 = req;
+ c->t4 = rx;
if (c->stats.delay)
stats_add_value(c->stats.delay, tmv_to_nanoseconds(ppd));
@@ -1453,6 +1463,8 @@ enum servo_state clock_synchronize(struct clock *c,
clockadj_step(c->clkid, -tmv_to_nanoseconds(c->master_offset));
c->t1 = tmv_zero();
c->t2 = tmv_zero();
+ c->t3 = tmv_zero();
+ c->t4 = tmv_zero();
if (c->sanity_check) {
clockcheck_set_freq(c->sanity_check, -adj);
clockcheck_step(c->sanity_check,
@@ -1534,6 +1546,8 @@ static void handle_state_decision_event(struct clock *c)
filter_reset(c->delay_filter);
c->t1 = tmv_zero();
c->t2 = tmv_zero();
+ c->t3 = tmv_zero();
+ c->t4 = tmv_zero();
c->path_delay = 0;
c->nrr = 1.0;
fresh_best = 1;
diff --git a/clock.h b/clock.h
index 4834464..b3a5c9f 100644
--- a/clock.h
+++ b/clock.h
@@ -179,9 +179,12 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
* Provide the estimated peer delay from a slave port.
* @param c The clock instance.
* @param ppd The peer delay as measured on a slave port.
+ * @param req The transmission time of the pdelay request message.
+ * @param rx The reception time of the pdelay request message.
* @param nrr The neighbor rate ratio as measured on a slave port.
*/
-void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr);
+void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx,
+ double nrr);
/**
* Poll for events and dispatch them.
diff --git a/port.c b/port.c
index 18a956d..7f9aa3d 100644
--- a/port.c
+++ b/port.c
@@ -1854,7 +1854,8 @@ calc:
port_nrate_calculate(p, t3, t4, tmv_add(c1, c2));
if (p->state == PS_UNCALIBRATED || p->state == PS_SLAVE) {
- clock_peer_delay(p->clock, p->peer_delay, p->nrate.ratio);
+ clock_peer_delay(p->clock, p->peer_delay, t1, t2,
+ p->nrate.ratio);
}
msg_put(p->peer_delay_req);
---
clock.c | 22 ++++++++++++++++++----
clock.h | 5 ++++-
port.c | 3 ++-
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/clock.c b/clock.c
index b841e81..9bc0352 100644
--- a/clock.c
+++ b/clock.c
@@ -108,8 +108,11 @@ struct clock {
double nrr;
tmv_t c1;
tmv_t c2;
+ tmv_t c3;
tmv_t t1;
tmv_t t2;
+ tmv_t t3;
+ tmv_t t4;
struct clock_description desc;
struct clock_stats stats;
int stats_interval;
@@ -1295,16 +1298,20 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
tmv_t c1, c2, c3, pd, t1, t2, t3, t4;
double rr;
+ c->t3 = timespec_to_tmv(req);
+ c->t4 = timestamp_to_tmv(rx);
+ c->c3 = correction_to_tmv(correction);
+
if (tmv_is_zero(c->t1))
return;
c1 = c->c1;
c2 = c->c2;
- c3 = correction_to_tmv(correction);
+ c3 = c->c3;
t1 = c->t1;
t2 = c->t2;
- t3 = timespec_to_tmv(req);
- t4 = timestamp_to_tmv(rx);
+ t3 = c->t3;
+ t4 = c->t4;
rr = clock_rate_ratio(c);
/*
@@ -1341,10 +1348,13 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
stats_add_value(c->stats.delay, tmv_to_nanoseconds(pd));
}
-void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr)
+void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx,
+ double nrr)
{
c->path_delay = ppd;
c->nrr = nrr;
+ c->t3 = req;
+ c->t4 = rx;
if (c->stats.delay)
stats_add_value(c->stats.delay, tmv_to_nanoseconds(ppd));
@@ -1453,6 +1463,8 @@ enum servo_state clock_synchronize(struct clock *c,
clockadj_step(c->clkid, -tmv_to_nanoseconds(c->master_offset));
c->t1 = tmv_zero();
c->t2 = tmv_zero();
+ c->t3 = tmv_zero();
+ c->t4 = tmv_zero();
if (c->sanity_check) {
clockcheck_set_freq(c->sanity_check, -adj);
clockcheck_step(c->sanity_check,
@@ -1534,6 +1546,8 @@ static void handle_state_decision_event(struct clock *c)
filter_reset(c->delay_filter);
c->t1 = tmv_zero();
c->t2 = tmv_zero();
+ c->t3 = tmv_zero();
+ c->t4 = tmv_zero();
c->path_delay = 0;
c->nrr = 1.0;
fresh_best = 1;
diff --git a/clock.h b/clock.h
index 4834464..b3a5c9f 100644
--- a/clock.h
+++ b/clock.h
@@ -179,9 +179,12 @@ void clock_path_delay(struct clock *c, struct timespec req, struct timestamp rx,
* Provide the estimated peer delay from a slave port.
* @param c The clock instance.
* @param ppd The peer delay as measured on a slave port.
+ * @param req The transmission time of the pdelay request message.
+ * @param rx The reception time of the pdelay request message.
* @param nrr The neighbor rate ratio as measured on a slave port.
*/
-void clock_peer_delay(struct clock *c, tmv_t ppd, double nrr);
+void clock_peer_delay(struct clock *c, tmv_t ppd, tmv_t req, tmv_t rx,
+ double nrr);
/**
* Poll for events and dispatch them.
diff --git a/port.c b/port.c
index 18a956d..7f9aa3d 100644
--- a/port.c
+++ b/port.c
@@ -1854,7 +1854,8 @@ calc:
port_nrate_calculate(p, t3, t4, tmv_add(c1, c2));
if (p->state == PS_UNCALIBRATED || p->state == PS_SLAVE) {
- clock_peer_delay(p->clock, p->peer_delay, p->nrate.ratio);
+ clock_peer_delay(p->clock, p->peer_delay, t1, t2,
+ p->nrate.ratio);
}
msg_put(p->peer_delay_req);
--
2.1.0
2.1.0