_Chain_Is_first/last overshoot

Joel Sherrill joel.sherrill at OARcorp.com
Wed Nov 9 20:10:40 UTC 2011


On 11/9/2011 1:56 PM, Sébastien Bourdeauducq wrote:
>
> -------- Original Message --------
> Subject: [Milkymist-devel] [PATCH, tentative] RTEMS:
> _Chain_Is_first/last overshoot
> Date: Wed, 9 Nov 2011 16:53:53 -0300
> From: Werner Almesberger<werner at almesberger.net>
> Reply-To: Milkymist One, Milkymist SoC and Flickernoise developers' list
> <devel at lists.milkymist.org>
> To: Milkymist One, Milkymist SoC and Flickernoise developers' list
> <devel at lists.milkymist.org>
>
> Doubly-linked lists ("chains") in RTEMS have a "control" block that
> looks like the next/prev link pair in an element. The list elements
> link both ways to this control block.
>
> _Chain_Is_first and _Chain_Is_last only probed if the link to the
> next element - which would be the control block - is non-NULL.
> Telling by the function description and given that there are already
> functions called _Chain_Is_head and _Chain_Is_tail (which could be
> simplified), this is probably not the intended behaviour.
>
> This also affects the aliases rtems_chain_is_first and
> rtems_chain_is_last.
>
> These functions are not used a lot and I haven't seen any immediate
> effect on M1 after changing them, so I can't say whether this patch
> may unearth other problems.

This needs a careful, careful review.  And a look at the history.

I think by definition your change is right.  This is technically 
checking that the_node
is permanent head or tail -- not checking that it is really the first or 
last real node
on the chain.

Can someone pitch in and help review where this is used?

--joel
> - Werner
>
> Index: cpukit/score/inline/rtems/score/chain.inl
> ===================================================================
> RCS file: /usr1/CVS/rtems/cpukit/score/inline/rtems/score/chain.inl,v
> retrieving revision 1.23
> diff -U 4 -r1.23 chain.inl
> --- cpukit/score/inline/rtems/score/chain.inl	25 Nov 2010 11:48:11
> -0000	1.23
> +++ cpukit/score/inline/rtems/score/chain.inl	9 Nov 2011 19:42:13 -0000
> @@ -296,9 +296,9 @@
>    RTEMS_INLINE_ROUTINE bool _Chain_Is_first(
>      const Chain_Node *the_node
>    )
>    {
> -  return (the_node->previous == NULL);
> +  return the_node->previous->previous == NULL;
>    }
>
>    /** @brief Is this the Last Node on the Chain
>     *
> @@ -313,9 +313,9 @@
>    RTEMS_INLINE_ROUTINE bool _Chain_Is_last(
>      const Chain_Node *the_node
>    )
>    {
> -  return (the_node->next == NULL);
> +  return the_node->next->next == NULL;
>    }
>
>    /** @brief Does this Chain have only One Node
>     *
> _______________________________________________
> http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
> IRC: #milkymist at Freenode
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users




More information about the users mailing list