ok
On Fri, May 14, 2021 at 9:36 AM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > Add _Per_CPU_Is_ISR_in_progress() as an optimized version of > _ISR_Is_in_progress(). > --- > cpukit/include/rtems/score/isr.h | 12 ------------ > cpukit/include/rtems/score/isrlevel.h | 11 +++++++++++ > cpukit/include/rtems/score/percpu.h | 10 ++++++++++ > cpukit/score/src/threadrestart.c | 2 +- > 4 files changed, 22 insertions(+), 13 deletions(-) > > diff --git a/cpukit/include/rtems/score/isr.h > b/cpukit/include/rtems/score/isr.h > index 3c6a9f1e2c..47c24f3a72 100644 > --- a/cpukit/include/rtems/score/isr.h > +++ b/cpukit/include/rtems/score/isr.h > @@ -147,18 +147,6 @@ void _ISR_Handler_initialization ( void ); > */ > void _ISR_Handler( void ); > > -/** > - * @brief Checks if an ISR in progress. > - * > - * This function returns true if the processor is currently servicing > - * and interrupt and false otherwise. A return value of true indicates > - * that the caller is an interrupt service routine, NOT a thread. > - * > - * @retval true Returns true when called from an ISR. > - * @retval false Returns false when not called from an ISR. > - */ > -bool _ISR_Is_in_progress( void ); > - > #ifdef __cplusplus > } > #endif > diff --git a/cpukit/include/rtems/score/isrlevel.h > b/cpukit/include/rtems/score/isrlevel.h > index 3981f2c688..d578a32c48 100644 > --- a/cpukit/include/rtems/score/isrlevel.h > +++ b/cpukit/include/rtems/score/isrlevel.h > @@ -144,6 +144,17 @@ typedef uint32_t ISR_Level; > RTEMS_COMPILER_MEMORY_BARRIER(); \ > } while (0) > > +/** > + * @brief Checks if an ISR in progress. > + * > + * This function returns true, if the processor is currently servicing > + * and interrupt, and false otherwise. A return value of true indicates > + * that the caller is an interrupt service routine, **not** a thread. > + * > + * @return true Returns true, if called from within an ISR, otherwise false. > + */ > +bool _ISR_Is_in_progress( void ); > + > /** @} */ > > #ifdef __cplusplus > diff --git a/cpukit/include/rtems/score/percpu.h > b/cpukit/include/rtems/score/percpu.h > index 58a89ec7a9..1aed17ab19 100644 > --- a/cpukit/include/rtems/score/percpu.h > +++ b/cpukit/include/rtems/score/percpu.h > @@ -683,6 +683,16 @@ static inline struct _Thread_Control > *_Per_CPU_Get_executing( > return cpu->executing; > } > > +static inline bool _Per_CPU_Is_ISR_in_progress( const Per_CPU_Control *cpu ) > +{ > +#if CPU_PROVIDES_ISR_IS_IN_PROGRESS == TRUE > + (void) cpu; > + return _ISR_Is_in_progress(); > +#else > + return cpu->isr_nest_level != 0; > +#endif > +} > + > static inline bool _Per_CPU_Is_processor_online( > const Per_CPU_Control *cpu > ) > diff --git a/cpukit/score/src/threadrestart.c > b/cpukit/score/src/threadrestart.c > index 7a1c8e4635..c8f7f7b6b1 100644 > --- a/cpukit/score/src/threadrestart.c > +++ b/cpukit/score/src/threadrestart.c > @@ -538,7 +538,7 @@ Status_Control _Thread_Restart( > > if ( > the_thread == _Per_CPU_Get_executing( cpu_self ) && > - !_ISR_Is_in_progress() > + !_Per_CPU_Is_ISR_in_progress( cpu_self ) > ) { > ignored_life_states = THREAD_LIFE_PROTECTED | > THREAD_LIFE_CHANGE_DEFERRED; > } else { > -- > 2.26.2 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel