> On 07/04/2022 11:55, gabriel.moy...@dlr.de wrote:
> >> On 07/04/2022 10:36, Gabriel Moyano wrote:
> >>> ---
> >>>    cpukit/include/sys/timepps.h | 4 ++++
> >>>    cpukit/score/src/kern_tc.c   | 7 +++++++
> >>>    2 files changed, 11 insertions(+)
> >>>
> >>> diff --git a/cpukit/include/sys/timepps.h
> >>> b/cpukit/include/sys/timepps.h index 621afb08ec..5703381ffa 100644
> >>> --- a/cpukit/include/sys/timepps.h
> >>> +++ b/cpukit/include/sys/timepps.h
> >>> @@ -32,7 +32,11 @@
> >>>
> >>>    typedef int pps_handle_t;
> >>>
> >>> +#ifndef __rtems__
> >>>    typedef unsigned pps_seq_t;
> >>> +#else /* __rtems__ */
> >>> +typedef Atomic_Uint      pps_seq_t;
> >>> +#endif /* __rtems__ */
> >>>
> >>>    typedef struct ntp_fp {
> >>>           unsigned int    integral;
> >>> diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
> >>> index e57da2c0ca..77f7a9212c 100644
> >>> --- a/cpukit/score/src/kern_tc.c
> >>> +++ b/cpukit/score/src/kern_tc.c
> >>> @@ -1932,10 +1932,17 @@ pps_fetch(struct pps_fetch_args *fapi, struct 
> >>> pps_state *pps)
> >>>                           tv.tv_usec = fapi->timeout.tv_nsec / 1000;
> >>>                           timo = tvtohz(&tv);
> >>>                   }
> >>> +#ifndef __rtems__
> >>>                   aseq = atomic_load_int(&pps->ppsinfo.assert_sequence);
> >>>                   cseq = atomic_load_int(&pps->ppsinfo.clear_sequence);
> >>>                   while (aseq == 
> >>> atomic_load_int(&pps->ppsinfo.assert_sequence) &&
> >>>                       cseq == 
> >>> atomic_load_int(&pps->ppsinfo.clear_sequence)) {
> >>> +#else /* __rtems__ */
> >>> +         aseq = atomic_load_acq_int(&pps->ppsinfo.assert_sequence);
> >>> +         cseq = atomic_load_acq_int(&pps->ppsinfo.clear_sequence);
> >>> +         while (aseq == 
> >>> atomic_load_acq_int(&pps->ppsinfo.assert_sequence) &&
> >>> +             cseq == atomic_load_acq_int(&pps->ppsinfo.clear_sequence)) {
> >>> +#endif /* __rtems__ */
> >>>                           if (abi_aware(pps, 1) && pps->driver_mtx != 
> >>> NULL) {
> >>>                                   if (pps->flags & PPSFLAG_MTX_SPIN) {
> >>>                                           err = msleep_spin(pps, 
> >>> pps->driver_mtx,
> >> Why do you need this change?
> >>
> > If you mean why atomic_load_int() was replaced by atomic_load_acq_int(), it 
> > is because atomic_load_int()  is not defined in rtems
> but in rtems-libbsd.
> 
> In FreeBSD, it seems the sequence is sometimes incremented using a normal 
> increment, for example:
> 
>       *pcount = pps->capcount;
>       (*pseq)++;
>       *tsp = ts;
> 
> So, just add the atomic_load_int() as an relaxed atomic load to the other 
> inline functions at the top of the file.

atomic_load_acq_int() is defined also at the beginning of the file. Do you want 
to repeat the function but with other name (atomic_load_int()) ? 


> I guess the synchronization needs a review in FreeBSD.
> 
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to