* David Goulet ([email protected]) wrote: > The hlist structure is no longer needed since it's the exact > same implementation in liburcu. > > Signed-off-by: David Goulet <[email protected]>
Committed and pushed, thanks! Mathieu > --- > include/Makefile.am | 1 - > include/ust/kcompat/hlist.h | 73 > ----------------------------------------- > include/ust/kcompat/kcompat.h | 2 - > libust/marker.c | 57 ++++++++++++++++---------------- > libust/tracepoint.c | 21 ++++++------ > 5 files changed, 40 insertions(+), 114 deletions(-) > delete mode 100644 include/ust/kcompat/hlist.h > > diff --git a/include/Makefile.am b/include/Makefile.am > index b89de20..dd000ba 100644 > --- a/include/Makefile.am > +++ b/include/Makefile.am > @@ -14,7 +14,6 @@ nobase_include_HEADERS = \ > ust/kcompat/kcompat.h \ > ust/kcompat/compiler.h \ > ust/kcompat/disable.h \ > - ust/kcompat/hlist.h \ > ust/kcompat/jhash.h \ > ust/kcompat/kref.h \ > ust/kcompat/simple.h \ > diff --git a/include/ust/kcompat/hlist.h b/include/ust/kcompat/hlist.h > deleted file mode 100644 > index 1bec11a..0000000 > --- a/include/ust/kcompat/hlist.h > +++ /dev/null > @@ -1,73 +0,0 @@ > -#ifndef _KCOMPAT_HLIST_H > -#define _KCOMPAT_HLIST_H > - > -/* > - * Kernel sourcecode compatible lightweight single pointer list head useful > - * for implementing hash tables > - * > - * Copyright (C) 2009 Novell Inc. > - * > - * Author: Jan Blunck <[email protected]> > - * > - * This program is free software; you can redistribute it and/or modify it > - * under the terms of the GNU Lesser General Public License version 2.1 as > - * published by the Free Software Foundation. > - */ > - > -struct hlist_head > -{ > - struct hlist_node *next; > -}; > - > -struct hlist_node > -{ > - struct hlist_node *next; > - struct hlist_node *prev; > -}; > - > -/* Initialize a new list head. */ > -static inline void INIT_HLIST_HEAD(struct hlist_head *ptr) > -{ > - ptr->next = NULL; > -} > - > -/* Get typed element from list at a given position. */ > -#define hlist_entry(ptr, type, member) > \ > - ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member))) > - > -/* Add new element at the head of the list. */ > -static inline void hlist_add_head (struct hlist_node *newp, > - struct hlist_head *head) > -{ > - if (head->next) > - head->next->prev = newp; > - > - newp->next = head->next; > - newp->prev = (struct hlist_node *)head; > - head->next = newp; > -} > - > -/* Remove element from list. */ > -static inline void hlist_del (struct hlist_node *elem) > -{ > - if (elem->next) > - elem->next->prev = elem->prev; > - > - elem->prev->next = elem->next; > -} > - > -#define hlist_for_each_entry(entry, pos, head, member) > \ > - for (pos = (head)->next, \ > - entry = hlist_entry(pos, typeof(*entry), member); \ > - pos != NULL; \ > - pos = pos->next, \ > - entry = hlist_entry(pos, typeof(*entry), member)) > - > -#define hlist_for_each_entry_safe(entry, pos, p, head, member) > \ > - for (pos = (head)->next, \ > - entry = hlist_entry(pos, typeof(*entry), member); \ > - (pos != NULL) && ({ p = pos->next; 1;}); \ > - pos = p, \ > - entry = hlist_entry(pos, typeof(*entry), member)) > - > -#endif /* _KCOMPAT_HLIST_H */ > diff --git a/include/ust/kcompat/kcompat.h b/include/ust/kcompat/kcompat.h > index 4aea4cc..b506afa 100644 > --- a/include/ust/kcompat/kcompat.h > +++ b/include/ust/kcompat/kcompat.h > @@ -59,8 +59,6 @@ > #include <ust/kcompat/simple.h> > #include <ust/kcompat/compiler.h> > #include <ust/kcompat/types.h> > -#include <ust/kcompat/hlist.h> > - > #include <ust/kcompat/jhash.h> > > #include <ust/kcompat/disable.h> > diff --git a/libust/marker.c b/libust/marker.c > index 39e12bb..2618b1a 100644 > --- a/libust/marker.c > +++ b/libust/marker.c > @@ -21,6 +21,7 @@ > #define _LGPL_SOURCE > #include <urcu-bp.h> > #include <urcu/rculist.h> > +#include <urcu/hlist.h> > > #include <ust/core.h> > #include <ust/marker.h> > @@ -64,7 +65,7 @@ void unlock_markers(void) > */ > #define MARKER_HASH_BITS 6 > #define MARKER_TABLE_SIZE (1 << MARKER_HASH_BITS) > -static struct hlist_head marker_table[MARKER_TABLE_SIZE]; > +static struct cds_hlist_head marker_table[MARKER_TABLE_SIZE]; > > /* > * Note about RCU : > @@ -75,7 +76,7 @@ static struct hlist_head marker_table[MARKER_TABLE_SIZE]; > * marker entries modifications are protected by the markers_mutex. > */ > struct marker_entry { > - struct hlist_node hlist; > + struct cds_hlist_node hlist; > char *format; > char *name; > /* Probe wrapper */ > @@ -386,8 +387,8 @@ marker_entry_remove_probe(struct marker_entry *entry, > */ > static struct marker_entry *get_marker(const char *channel, const char *name) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct marker_entry *e; > size_t channel_len = strlen(channel) + 1; > size_t name_len = strlen(name) + 1; > @@ -395,7 +396,7 @@ static struct marker_entry *get_marker(const char > *channel, const char *name) > > hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); > head = &marker_table[hash & ((1 << MARKER_HASH_BITS)-1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) > return e; > } > @@ -409,8 +410,8 @@ static struct marker_entry *get_marker(const char > *channel, const char *name) > static struct marker_entry *add_marker(const char *channel, const char *name, > const char *format) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct marker_entry *e; > size_t channel_len = strlen(channel) + 1; > size_t name_len = strlen(name) + 1; > @@ -421,7 +422,7 @@ static struct marker_entry *add_marker(const char > *channel, const char *name, > if (format) > format_len = strlen(format) + 1; > head = &marker_table[hash & ((1 << MARKER_HASH_BITS)-1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { > DBG("Marker %s.%s busy", channel, name); > return ERR_PTR(-EBUSY); /* Already there */ > @@ -459,7 +460,7 @@ static struct marker_entry *add_marker(const char > *channel, const char *name, > e->format_allocated = 0; > e->refcount = 0; > e->rcu_pending = 0; > - hlist_add_head(&e->hlist, head); > + cds_hlist_add_head(&e->hlist, head); > return e; > } > > @@ -469,8 +470,8 @@ static struct marker_entry *add_marker(const char > *channel, const char *name, > */ > static int remove_marker(const char *channel, const char *name) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct marker_entry *e; > int found = 0; > size_t channel_len = strlen(channel) + 1; > @@ -480,7 +481,7 @@ static int remove_marker(const char *channel, const char > *name) > > hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); > head = &marker_table[hash & ((1 << MARKER_HASH_BITS)-1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { > found = 1; > break; > @@ -490,7 +491,7 @@ static int remove_marker(const char *channel, const char > *name) > return -ENOENT; > if (e->single.func != __mark_empty_function) > return -EBUSY; > - hlist_del(&e->hlist); > + cds_hlist_del(&e->hlist); > if (e->format_allocated) > free(e->format); > ret = ltt_channels_unregister(e->channel); > @@ -912,12 +913,12 @@ get_marker_from_private_data(marker_probe_func *probe, > void *probe_private) > { > struct marker_entry *entry; > unsigned int i; > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > > for (i = 0; i < MARKER_TABLE_SIZE; i++) { > head = &marker_table[i]; > - hlist_for_each_entry(entry, node, head, hlist) { > + cds_hlist_for_each_entry(entry, node, head, hlist) { > if (!entry->ptype) { > if (entry->single.func == probe > && entry->single.probe_private > @@ -1013,8 +1014,8 @@ end: > void *marker_get_private_data(const char *channel, const char *name, > marker_probe_func *probe, int num) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct marker_entry *e; > size_t channel_len = strlen(channel) + 1; > size_t name_len = strlen(name) + 1; > @@ -1023,7 +1024,7 @@ void *marker_get_private_data(const char *channel, > const char *name, > > hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); > head = &marker_table[hash & ((1 << MARKER_HASH_BITS)-1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { > if (!e->ptype) { > if (num == 0 && e->single.func == probe) > @@ -1178,14 +1179,14 @@ void marker_iter_reset(struct marker_iter *iter) > /* > * must be called with current->user_markers_mutex held > */ > -static void free_user_marker(char __user *state, struct hlist_head *head) > +static void free_user_marker(char __user *state, struct cds_hlist_head *head) > { > struct user_marker *umark; > - struct hlist_node *pos, *n; > + struct cds_hlist_node *pos, *n; > > - hlist_for_each_entry_safe(umark, pos, n, head, hlist) { > + cds_hlist_for_each_entry_safe(umark, pos, n, head, hlist) { > if (umark->state == state) { > - hlist_del(&umark->hlist); > + cds_hlist_del(&umark->hlist); > free(umark); > } > } > @@ -1243,12 +1244,12 @@ static void free_user_marker(char __user *state, > struct hlist_head *head) > void exit_user_markers(struct task_struct *p) > { > struct user_marker *umark; > - struct hlist_node *pos, *n; > + struct cds_hlist_node *pos, *n; > > if (thread_group_leader(p)) { > pthread_mutex_lock(&markers_mutex); > pthread_mutex_lock(&p->user_markers_mutex); > - hlist_for_each_entry_safe(umark, pos, n, &p->user_markers, > + cds_hlist_for_each_entry_safe(umark, pos, n, &p->user_markers, > hlist) > free(umark); > INIT_HLIST_HEAD(&p->user_markers); > @@ -1306,8 +1307,8 @@ void ltt_dump_marker_state(struct ust_trace *trace) > { > struct marker_entry *entry; > struct ltt_probe_private_data call_data; > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > unsigned int i; > > pthread_mutex_lock(&markers_mutex); > @@ -1316,7 +1317,7 @@ void ltt_dump_marker_state(struct ust_trace *trace) > > for (i = 0; i < MARKER_TABLE_SIZE; i++) { > head = &marker_table[i]; > - hlist_for_each_entry(entry, node, head, hlist) { > + cds_hlist_for_each_entry(entry, node, head, hlist) { > __trace_mark(0, metadata, core_marker_id, > &call_data, > "channel %s name %s event_id %hu " > diff --git a/libust/tracepoint.c b/libust/tracepoint.c > index dbaca6f..47d3785 100644 > --- a/libust/tracepoint.c > +++ b/libust/tracepoint.c > @@ -27,6 +27,7 @@ > > #define _LGPL_SOURCE > #include <urcu-bp.h> > +#include <urcu/hlist.h> > > //extern struct tracepoint __start___tracepoints[] > __attribute__((visibility("hidden"))); > //extern struct tracepoint __stop___tracepoints[] > __attribute__((visibility("hidden"))); > @@ -49,7 +50,7 @@ static DEFINE_MUTEX(tracepoints_mutex); > */ > #define TRACEPOINT_HASH_BITS 6 > #define TRACEPOINT_TABLE_SIZE (1 << TRACEPOINT_HASH_BITS) > -static struct hlist_head tracepoint_table[TRACEPOINT_TABLE_SIZE]; > +static struct cds_hlist_head tracepoint_table[TRACEPOINT_TABLE_SIZE]; > > /* > * Note about RCU : > @@ -58,7 +59,7 @@ static struct hlist_head > tracepoint_table[TRACEPOINT_TABLE_SIZE]; > * Tracepoint entries modifications are protected by the tracepoints_mutex. > */ > struct tracepoint_entry { > - struct hlist_node hlist; > + struct cds_hlist_node hlist; > struct probe *probes; > int refcount; /* Number of times armed. 0 if disarmed. */ > char name[0]; > @@ -192,13 +193,13 @@ tracepoint_entry_remove_probe(struct tracepoint_entry > *entry, void *probe, > */ > static struct tracepoint_entry *get_tracepoint(const char *name) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct tracepoint_entry *e; > u32 hash = jhash(name, strlen(name), 0); > > head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(name, e->name)) > return e; > } > @@ -211,14 +212,14 @@ static struct tracepoint_entry *get_tracepoint(const > char *name) > */ > static struct tracepoint_entry *add_tracepoint(const char *name) > { > - struct hlist_head *head; > - struct hlist_node *node; > + struct cds_hlist_head *head; > + struct cds_hlist_node *node; > struct tracepoint_entry *e; > size_t name_len = strlen(name) + 1; > u32 hash = jhash(name, name_len-1, 0); > > head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)]; > - hlist_for_each_entry(e, node, head, hlist) { > + cds_hlist_for_each_entry(e, node, head, hlist) { > if (!strcmp(name, e->name)) { > DBG("tracepoint %s busy", name); > return ERR_PTR(-EEXIST); /* Already there */ > @@ -234,7 +235,7 @@ static struct tracepoint_entry *add_tracepoint(const char > *name) > memcpy(&e->name[0], name, name_len); > e->probes = NULL; > e->refcount = 0; > - hlist_add_head(&e->hlist, head); > + cds_hlist_add_head(&e->hlist, head); > return e; > } > > @@ -244,7 +245,7 @@ static struct tracepoint_entry *add_tracepoint(const char > *name) > */ > static inline void remove_tracepoint(struct tracepoint_entry *e) > { > - hlist_del(&e->hlist); > + cds_hlist_del(&e->hlist); > free(e); > } > > -- > 1.7.3.2 > -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
