[PATCH] rtems: Fix no protocol mutex release
Pavel Pisa
pisa at cmp.felk.cvut.cz
Mon Jun 6 12:05:07 UTC 2016
Hello Sebastian,
On Monday 06 of June 2016 13:12:52 Sebastian Huber wrote:
....
> > But if the RTEMS API is getting touched then in this regard I rise
> > again my opinion that semaphores and mutexes should be strictly
> > separated. This would prevent confusion and help to static code analyze
> > tools etc.
>
> in general I agree.
>
...
> > That is why I suggest to separate set of SCORE and corresponding
> > RTEMS directives for mutexes
> >
> > rtems_mutex_*
>
> However, I would rather consider the Classic API as frozen. We should
> focus on proper support for standard APIs like C11, C++11 and POSIX
> threads.
>
> In addition, for SMP the object identifier approach is useless for high
> performance applications due to three reasons
I see two possible problems when actual state is unchanged
1) it would be unfortunate if the need to keep mutexes and semaphores
under rtems_semaphore would block to clean stuff and separate
these in SCORE level.
2) classic RTEMS API is used together with BSP API variants in BSPs
and drivers code. It has been (seems like) preferred API for these
areas because POSIX API has been optional and sometimes POSIX
is more verbose/complex (for example building prio. inherit mutexes
take quite more lines - preparing attributes etc.). So some simpler
primitives would be better for these areas
- it can be wrapper to pthread_mutex_ with appropriate parameters
- it can be based directly on supercore
- should not be directly C++ synchronization, C++ support should
be optional
So if the RTEMS classic API is not cleaned in mutexes respect, then there
should be some guideline which API subset should be used in BSPs,
drivers and RTEMS subsystems. Option is to use BSD directives if BSD
compatibility layer would be included in main RTEMS repo.
But even that is not ideal solution.
If classic RTEMS API is not suggested for BSPs anymore then it would
worth to convert all mainline included code to selected preferred solution.
From my point of view, classic RTEMS API is reasonable for internal
subsystems implementation. Then keeping it in shape and friendly for
automatic static code analysis is important.
So my proposal is to define rtems_mutex_ at least as direct alias
to RTEMS binary semaphore with right flags preset forces, but flags
left there for future tuning.
The next step is to implement rtems_mutex right way and teach original
rtems_semaphore to point to the right background primitive if it is
initialized with RTEMS_BINARY_SEMAPHORE.
I understand that it all is big amount of work and I cannot help
much. But it would worth to discus and find some consensus what
is a preferred direction.
Best wishes,
Pavel Pisa
More information about the devel
mailing list