From ac5d8d008d298c7c08101d4a521686578deec6a9 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 23 Apr 2015 17:39:35 -0400 Subject: [PATCH] Fix: add hlist lttng wrappers For older kernels (e.g. 2.6.38). Signed-off-by: Mathieu Desnoyers --- wrapper/list.h | 7 +++++++ wrapper/rcu.h | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/wrapper/list.h b/wrapper/list.h index 0d79e512..25e80406 100644 --- a/wrapper/list.h +++ b/wrapper/list.h @@ -29,6 +29,13 @@ #include #include +/* + * return the first or the next element in an RCU protected hlist + */ +#define lttng_hlist_first_rcu(head) (*((struct hlist_node __rcu **)(&(head)->first))) +#define lttng_hlist_next_rcu(node) (*((struct hlist_node __rcu **)(&(node)->next))) +#define lttng_hlist_pprev_rcu(node) (*((struct hlist_node __rcu **)((node)->pprev))) + #define lttng_hlist_entry_safe(ptr, type, member) \ ({ typeof(ptr) ____ptr = (ptr); \ ____ptr ? hlist_entry(____ptr, type, member) : NULL; \ diff --git a/wrapper/rcu.h b/wrapper/rcu.h index d96d42d1..8c4cd744 100644 --- a/wrapper/rcu.h +++ b/wrapper/rcu.h @@ -81,10 +81,10 @@ * not do any RCU debugging or tracing. */ #define lttng_hlist_for_each_entry_rcu(pos, head, member) \ - for (pos = lttng_hlist_entry_safe (lttng_rcu_dereference(hlist_first_rcu(head)), \ + for (pos = lttng_hlist_entry_safe (lttng_rcu_dereference(lttng_hlist_first_rcu(head)), \ typeof(*(pos)), member); \ pos; \ - pos = lttng_hlist_entry_safe(lttng_rcu_dereference(hlist_next_rcu( \ + pos = lttng_hlist_entry_safe(lttng_rcu_dereference(lttng_hlist_next_rcu( \ &(pos)->member)), typeof(*(pos)), member)) #endif /* _LTTNG_WRAPPER_RCU_H */ -- 2.34.1