[PATCH 11/13] rtems: New errors for rtems_signal_catch()
Gedare Bloom
gedare at rtems.org
Fri Feb 19 16:52:23 UTC 2021
On Fri, Feb 19, 2021 at 12:00 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> On 18/02/2021 20:29, Joel Sherrill wrote:
>
> >
> >
> > On Thu, Feb 18, 2021 at 11:32 AM Gedare Bloom <gedare at rtems.org
> > <mailto:gedare at rtems.org>> wrote:
> >
> > On Wed, Feb 17, 2021 at 12:30 PM Sebastian Huber
> > <sebastian.huber at embedded-brains.de
> > <mailto:sebastian.huber at embedded-brains.de>> wrote:
> > >
> > > Ensure that no invalid modes are set during ASR processing.
> > >
> > > Update #4244.
> > > ---
> > > cpukit/rtems/src/signalcatch.c | 27 +++++++++++++++++++++++++++
> > > 1 file changed, 27 insertions(+)
> > >
> > > diff --git a/cpukit/rtems/src/signalcatch.c
> > b/cpukit/rtems/src/signalcatch.c
> > > index 8ee22e5ec1..da56d26dc5 100644
> > > --- a/cpukit/rtems/src/signalcatch.c
> > > +++ b/cpukit/rtems/src/signalcatch.c
> > > @@ -22,7 +22,10 @@
> > > #endif
> > >
> > > #include <rtems/rtems/signalimpl.h>
> > > +#include <rtems/rtems/modesimpl.h>
> > > #include <rtems/rtems/tasksdata.h>
> > > +#include <rtems/score/schedulerimpl.h>
> > > +#include <rtems/score/smpimpl.h>
> > > #include <rtems/score/threadimpl.h>
> > >
> > > RTEMS_STATIC_ASSERT( RTEMS_DEFAULT_MODES == 0,
> > _ASR_Create_mode_set );
> > > @@ -37,7 +40,31 @@ rtems_status_code rtems_signal_catch(
> > > ASR_Information *asr;
> > > ISR_lock_Context lock_context;
> > >
> > > +#if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
> > > + if (
> > > + _Modes_Get_interrupt_level( mode_set ) != 0
> > > +#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
> > > + && _SMP_Need_inter_processor_interrupts()
> > > +#endif
> > > + ) {
> > > + return RTEMS_NOT_IMPLEMENTED;
> > > + }
> > > +#endif
> > > +
> > > executing = _Thread_State_acquire_for_executing( &lock_context );
> > > +
> > > +#if defined(RTEMS_SMP)
> > add a brief comment here, the logic a little complicated with
> > double-negatives, e.g.,
> > /* Check for non-preempt mode requested with a scheduler that does not
> > support non-preemption */
> >
> >
> > I think I have seen a very similar check in other places. Can this
> > combination
> > of logic be turned into a macro which has a better name?
> What about _Modes_Is_preempt_mode_implemented() and
> _Modes_Is_interrupt_level_implemented()?
>
supported() is better than implemented() I think, but that should
capture the idea of Joel's comment about having a function/macro to
check that the requested mode is supported by the schedler.
> --
> embedded brains GmbH
> Herr Sebastian HUBER
> Dornierstr. 4
> 82178 Puchheim
> Germany
> email: sebastian.huber at 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/
>
More information about the devel
mailing list