On Mon, Dec 5, 2022 at 3:41 AM Adrian Moreno <[email protected]> wrote:
>
> The .prev member of a rculist should not be used directly by users
> because it's not rcu-safe. A convenient fake mutex (rculist_fake_mutex)
> helps ensuring that in conjunction with clang's thread safety
> extensions.
>
> Only writers with exclusive access to the rculist should access .prev
> via some of the provided *_protected() accessors.
>
> Use rculist_back_protected() in REVERSE_PROTECTED iterators to avoid
> clang's compilation warning.
>
> Signed-off-by: Adrian Moreno <[email protected]>

This fixes the clang warning.

Acked-by: Mike Pattrick <[email protected]>

> ---
>  lib/rculist.h | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/lib/rculist.h b/lib/rculist.h
> index 9bb8cbf3e..6df963eb2 100644
> --- a/lib/rculist.h
> +++ b/lib/rculist.h
> @@ -378,12 +378,14 @@ rculist_is_singleton_protected(const struct rculist 
> *list)
>           UPDATE_MULTIVAR(ITER, rculist_next(ITER_VAR(ITER))))
>
>  #define RCULIST_FOR_EACH_REVERSE_PROTECTED(ITER, MEMBER, RCULIST)            
>  \
> -    for (INIT_MULTIVAR(ITER, MEMBER, (RCULIST)->prev, struct rculist);       
>  \
> +    for (INIT_MULTIVAR(ITER, MEMBER, rculist_back_protected(RCULIST),        
>  \
> +                       struct rculist);                                      
>  \
>           CONDITION_MULTIVAR(ITER, MEMBER, ITER_VAR(ITER) != (RCULIST));      
>  \
> -         UPDATE_MULTIVAR(ITER, ITER_VAR(ITER)->prev))
> +         UPDATE_MULTIVAR(ITER, rculist_back_protected(ITER_VAR(ITER))))
>
>  #define RCULIST_FOR_EACH_REVERSE_PROTECTED_CONTINUE(ITER, MEMBER, RCULIST)   
>  \
> -    for (INIT_MULTIVAR(ITER, MEMBER, (ITER)->MEMBER.prev, struct rculist);   
>  \
> +    for (INIT_MULTIVAR(ITER, MEMBER, rculist_back_protected(ITER->MEMBER),   
>  \
> +                       struct rculist);                                      
>  \
>           CONDITION_MULTIVAR(ITER, MEMBER, ITER_VAR(ITER) != (RCULIST));      
>  \
>           UPDATE_MULTIVAR(ITER, ITER_VAR(ITER)->prev))
>
> --
> 2.38.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to