AW: Dependencies of PPS API in rtems-libbsd

Sebastian Huber sebastian.huber at
Thu Mar 17 12:45:52 UTC 2022

On 16/03/2022 08:04, Gabriel.Moyano at wrote:
> Hello Sebastian,
>> On 15/03/2022 16:31, Gabriel.Moyano at wrote:
>>> I'm working on enabling PPS support in RTEMS
>> does this mean you want to define PPS_SYNC for kern_tc.c and kern_ntptime.c in RTEMS?
> yes
>> I guess you want to enable tc_poll_pps in struct timecounter as well?
> I didn't plan to do that but it can be done just removing some #ifndef, right?

Is this handler not use for the PPS support? If it is currently unused, 
then please let it disabled.

>> For what do you need the sleep() and wakeup() support? Is this only used by the RFC 2783 PPS-API implementation?
> Yes, they are required by pps_fetch() and pps_event()
>> If you want to keep implement this in RTEMS, then you can convert this to use a condition variable from <sys/lock.h> or
>> <rtems/thread.h>.
> Do you mean to add a condition variable, for example in struct pps_state, and to replace sleep() and wakeup() by wait and signal? It is good idea if we don't want to use the first functions.

Ok, it seems the pps_event() could be called by interrupt service 
routines. In this case, you cannot use a mutex and condition variables. 
You have to use a thread queue directly. Use the thread queue ISR lock 
for mutual exclusion. Use _Thread_queue_Enqueue() to emulate sleep() and 
_Thread_queue_Flush_critical() to emulate wakeup(). Check all critical 
sections that they can be protected by an ISR lock (no blocking calls 
and short).

>> All the uses of sleep() and wakeup() need to be clearly identified and if possible avoided.
> May I ask, what is the reason for avoiding them?

The sleep() and wakeup() synchronization is nice, but not suitable for 
real-time systems (use of hash tables).

> What do you think about coping the functions lmax()/qmin() and the define for ENOIOCTL? For lmax()/qmin() I saw that the file where are defined (libkern.h) is in libnetworking. Not sure what it is the best option here, I don't like when the things are duplicated.

Since you refer to libnetworking I guess you work with RTEMS 5. Please 
first get it working on RTEMS 6 and then we think about a back port.

> What about tvtohz(), which is defined in rtemsbsd/rtems/rtems-kernel-timesupport.c?

Maybe just copy the dependencies to kern_tc.c. Later we can try to move 
them to shared locations if necessary.

embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
email: sebastian.huber at
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:

More information about the devel mailing list