On 07/04/2022 11:56, gabriel.moy...@dlr.de wrote:
On 07/04/2022 10:36, Gabriel Moyano wrote:
---
cpukit/score/src/kern_tc.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
index a5c7b4b841..a8ba268ea3 100644
--- a/cpukit/score/src/kern_tc.c
+++ b/cpukit/score/src/kern_tc.c
@@ -2109,9 +2109,11 @@ pps_capture(struct pps_state *pps)
pps->capffth = fftimehands;
#endif
pps->capcount = th->th_counter->tc_get_timecount(th->th_counter);
+#ifndef __rtems__
atomic_thread_fence_acq();
if (pps->capgen != th->th_generation)
pps->capgen = 0;
+#endif /* __rtems__ */
}
void
@@ -2135,10 +2137,12 @@ pps_event(struct pps_state *pps, int event)
/* Nothing to do if not currently set to capture this event type. */
if ((event & pps->ppsparam.mode) == 0)
return;
+#ifndef __rtems__
/* If the timecounter was wound up underneath us, bail out. */
if (pps->capgen == 0 || pps->capgen !=
atomic_load_acq_int(&pps->capth->th_generation))
return;
+#endif /* __rtems__ */
/* Things would be easier with arrays. */
if (event == PPS_CAPTUREASSERT) {
@@ -2189,10 +2193,12 @@ pps_event(struct pps_state *pps, int event)
bintime_addx(&bt, pps->capth->th_scale * tcount);
bintime2timespec(&bt, &ts);
+#ifndef __rtems__
/* If the timecounter was wound up underneath us, bail out. */
atomic_thread_fence_acq();
if (pps->capgen != pps->capth->th_generation)
return;
+#endif /* __rtems__ */
*pcount = pps->capcount;
(*pseq)++;
Why is this change justified?
Since only one timehands object is used, the generation is updated more
frequently. This can even happen between pps_capture() and pps_event(), making
the synchronization impossible.
It seems you didn't test with SMP configurations, since here we have two
timehands.
Which sequence of function calls and timings cases the problem? This
should be definitely a test case.
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel