On Fri, Aug 5, 2022 at 5:45 AM Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote:
> On 05/08/2022 00:08, Joel Sherrill wrote: > > This adds the configure option CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR > > which allows the application to choose whether to have the POSIX > > timer_create() function follow the behavior defined by POSIX or > > the FACE Technical Standard. > > > > Updates #4691. > > It would be nice if you could add items for the new option to > rtems-central so that we can use it for the Doxygen documentation and > the manual. > I'll give it a try. Is there a readme or really good example? > > --- > > cpukit/include/rtems/confdefs.h | 1 + > > cpukit/include/rtems/confdefs/face.h | 71 > +++++++++++++++++ > > cpukit/include/rtems/posix/timerimpl.h | 11 +++ > > cpukit/posix/src/psxtimercreate.c | 19 ++++- > > spec/build/testsuites/psxtests/grp.yml | 2 + > > spec/build/testsuites/psxtests/psxtimer_face01.yml | 20 +++++ > > testsuites/psxtests/psxtimer_face01/psxtimer.c | 89 > ++++++++++++++++++++++ > > .../psxtests/psxtimer_face01/psxtimer_face01.doc | 39 ++++++++++ > > .../psxtests/psxtimer_face01/psxtimer_face01.scn | 4 + > > 9 files changed, 255 insertions(+), 1 deletion(-) > > create mode 100644 cpukit/include/rtems/confdefs/face.h > > create mode 100644 spec/build/testsuites/psxtests/psxtimer_face01.yml > > create mode 100644 testsuites/psxtests/psxtimer_face01/psxtimer.c > > create mode 100644 > testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc > > create mode 100644 > testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn > > > > diff --git a/cpukit/include/rtems/confdefs.h > b/cpukit/include/rtems/confdefs.h > > index e6dd3d7..3927d26 100644 > > --- a/cpukit/include/rtems/confdefs.h > > +++ b/cpukit/include/rtems/confdefs.h > > @@ -64,6 +64,7 @@ > > #include <rtems/confdefs/clock.h> > > #include <rtems/confdefs/console.h> > > #include <rtems/confdefs/extensions.h> > > +#include <rtems/confdefs/face.h> > > #include <rtems/confdefs/inittask.h> > > #include <rtems/confdefs/initthread.h> > > #include <rtems/confdefs/iodrivers.h> > > diff --git a/cpukit/include/rtems/confdefs/face.h > b/cpukit/include/rtems/confdefs/face.h > > new file mode 100644 > > index 0000000..07ab62e > > --- /dev/null > > +++ b/cpukit/include/rtems/confdefs/face.h > > @@ -0,0 +1,71 @@ > > +/* SPDX-License-Identifier: BSD-2-Clause */ > > + > > +/** > > + * @file > > + * > > + * @ingroup RTEMSImplApplConfig > > + * > > + * @brief This header file evaluates configuration options related to > > + * the FACE Technical Standard. > > + * > > + * The FACE Technical Standard (https://opengroup.org/face) is an > > + * open standard designed for safety critical embedded systems. It > > + * includes POSIX profiles and requirements that promote safety > > + * and portability. As a general rules, the profiles place a minimum > > + * on the services which an operating system must provide. Those > > + * same profile definitions represent the maximum services which > > + * an application may use. > > + */ > > + > > +/* > > + * Copyright (C) 2022 On-Line Applications Research Corporation (OAR) > > + * > > + * Redistribution and use in source and binary forms, with or without > > + * modification, are permitted provided that the following conditions > > + * are met: > > + * 1. Redistributions of source code must retain the above copyright > > + * notice, this list of conditions and the following disclaimer. > > + * 2. Redistributions in binary form must reproduce the above copyright > > + * notice, this list of conditions and the following disclaimer in > the > > + * documentation and/or other materials provided with the > distribution. > > + * > > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED > TO, THE > > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR > CONTRIBUTORS BE > > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER > IN > > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR > OTHERWISE) > > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED > OF THE > > + * POSSIBILITY OF SUCH DAMAGE. > > + */ > > + > > +#ifndef _RTEMS_CONFDEFS_FACE_H > > +#define _RTEMS_CONFDEFS_FACE_H > > + > > +#ifndef __CONFIGURATION_TEMPLATE_h > > +#error "Do not include this file directly, use <rtems/confdefs.h> > instead" > > +#endif > > + > > +#ifdef CONFIGURE_INIT > > + > > +#include <rtems/posix/timerimpl.h> > > + > > +#ifndef CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR > > + bool _POSIX_Timer_Is_allowed_on_CLOCK_REALTIME( void ) > > + { > > + /* > > + * Per the FACE Technical Standard, POSIX timers should not be > > + * allowed on CLOCK_REALTIME for safety reasons. If the application > > + * wants the FACE behavior, then this method is instantiated. > > + */ > > + return false; > > + } > > I would change this to: > > int _POSIX_Timer_Is_clock_valid( clockid_t clock_id ) > > It returns an error number or zero. > Perhaps OK on errno or zero but that name isn't right. CLOCK_REALTIME is still a valid POSIX clock. There are just strict requirements around its use for the FACE profiles. That name implies a general validity. The requirement is specifically around creating a timer that uses CLOCK_REALTIME. Previous work has addressed the other restrictions. The TOD Hook additions do allow a BSP to sync an RTC but the FACE purpose was to check if the application (e.g. partition/virtual space) has permission to set the clock. > > > + > > +#endif /* CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR */ > > + > > +#endif /* CONFIGURE_INIT */ > > + > > +#endif /* _RTEMS_CONFDEFS_FACE_H */ > > diff --git a/cpukit/include/rtems/posix/timerimpl.h > b/cpukit/include/rtems/posix/timerimpl.h > > index 8f92186..c6e3b64 100644 > > --- a/cpukit/include/rtems/posix/timerimpl.h > > +++ b/cpukit/include/rtems/posix/timerimpl.h > > @@ -139,6 +139,17 @@ RTEMS_INLINE_ROUTINE void _POSIX_Timer_Release( > > _ISR_lock_ISR_enable( lock_context ); > > } > > > > +/** > > + * @brief Follow POSIX or FACE Technical Standard on timer_create > > + * > > + * POSIX allows for the creation of timers based on CLOCK_REALTIME. > > + * This is viewed as a safety issue by the FACE Technical Standard > > + * and required to return an error. These are conflicting behaviors. > > + * This method is instanced by configuration when FACE conformant > > + * behavior is desired by the application. > > + */ > > +RTEMS_WEAK bool _POSIX_Timer_Is_allowed_on_CLOCK_REALTIME( void ); > > No RTEMS_WEAK in the header file. > OK. Need another include file clearly. > > -- > 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