On 05/08/2022 16:14, Joel Sherrill wrote:


On Fri, Aug 5, 2022 at 5:45 AM Sebastian Huber <sebastian.hu...@embedded-brains.de <mailto: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?

There is this:

https://docs.rtems.org/branches/master/eng/req/howto.html#



     > ---
     >   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
    <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.

Maybe name it _POSIX_Timer_Is_clock_allowed(). The benefit of using an error number return is that this avoids dead code for the default case.


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.

It should move to <rtems/posix/timer.h> which is included by confdefs.h.

--
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

Reply via email to