diff mbox series

[ovs-dev,1/2] rculist: use rculist_back_protected to access prev

Message ID 20221128092510.251041-1-amorenoz@redhat.com
State Superseded
Headers show
Series [ovs-dev,1/2] rculist: use rculist_back_protected to access prev | expand

Checks

Context Check Description
ovsrobot/intel-ovs-compilation fail test: fail
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed

Commit Message

Adrian Moreno Nov. 28, 2022, 9:25 a.m. UTC
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 <amorenoz@redhat.com>
---
 lib/rculist.h | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
diff mbox series

Patch

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))