[PATCH v2] Add TOD Hooks to allow BSP to take action when TOD is set
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Nov 18 07:06:20 UTC 2019
On 15/11/2019 15:57, Joel Sherrill wrote:
>
>
> On Thu, Nov 14, 2019 at 11:59 PM Sebastian Huber
> <sebastian.huber at embedded-brains.de
> <mailto:sebastian.huber at embedded-brains.de>> wrote:
>
>
>
> On 14/11/2019 21:44, Joel Sherrill wrote:
> > +bool _TOD_Hook_Register(
> > + TOD_Hook *hook
> > +)
> > +{
> > + ISR_lock_Context lock_context;
> > +
> > + /*
> > + * At this time, this method does NOT have a Classic or POSIX API
> > + * that exports it. Any use of this method will be a direct call.
> > + * It should only be called while NOT holding the TOD lock.
> > + */
> > + _Assert( !_TOD_Is_owner() );
> > +
> > + if ( hook == NULL ) {
> > + return FALSE;
> > + }
> > +
> > + _TOD_Lock();
> > + _TOD_Acquire( &lock_context );
> > + _Chain_Append_unprotected( &_TOD_Hooks, &hook->Node );
> > + _TOD_Unlock();
> > + return true;
> > +}
>
> Where is the _TOD_Release()? This function should not test for a NULL
> hook and return void. Such kind of error handling should be done by
> upper layer functions and not at the lowest level.
>
>
> There is no method _TOD_Release in the source tree. I followed the locking
> pattern in clockset.c.
>
> _TOD_Lock();
> _TOD_Acquire( &lock_context );
> retval = _TOD_Set( &tod_as_timespec, &lock_context );
> _TOD_Unlock();
In this case you need the _TOD_Acquire() since _TOD_Set() takes care of
the release and expects an acquired TOD lock and a valid lock context.
Please remove all the unnecessary _TOD_Acquire() since they break the
SMP support.
>
> There is no upper level. Per our earlier discussions, there is not an
> API above the
> score on this for register and unregister. So the error checking is
> needed here. If there
> were a layer about this, the locking and error checking would be there.
Testing in _TOD_Hook_Register() that that the hook pointer is non-NULL
is completely superfluous from my point of view. Users of underscore
functions are supposed to know what they do. If you call this function,
you want to register a hook, don't you? If you feel safer, then you can
add an _Assert( hook != NULL ).
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list