X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=libust%2Ftracepoint.c;h=6a8795b70c218498446d7b16370cfb62d484c88f;hb=8161463975e218e0833d31ab1577a7ceb9e8e9f3;hp=a1aac8264e255d85beeefe7a3472adc378bc4c6f;hpb=30ffe2794fc413035208cdd2a7a061bc208e210f;p=ust.git diff --git a/libust/tracepoint.c b/libust/tracepoint.c index a1aac82..6a8795b 100644 --- a/libust/tracepoint.c +++ b/libust/tracepoint.c @@ -4,8 +4,8 @@ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * License as published by the Free Software Foundation; + * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,16 +19,17 @@ * Ported to userspace by Pierre-Marc Fournier. */ +#define _LGPL_SOURCE #include #include +#include #include #include -#include "usterr_signal_safe.h" - -#define _LGPL_SOURCE #include #include +#include "usterr_signal_safe.h" + //extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); //extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); @@ -60,7 +61,7 @@ static struct cds_hlist_head tracepoint_table[TRACEPOINT_TABLE_SIZE]; */ struct tracepoint_entry { struct cds_hlist_node hlist; - struct probe *probes; + struct tracepoint_probe *probes; int refcount; /* Number of times armed. 0 if disarmed. */ char name[0]; }; @@ -70,12 +71,12 @@ struct tp_probes { //ust// struct rcu_head rcu; struct cds_list_head list; } u; - struct probe probes[0]; + struct tracepoint_probe probes[0]; }; static inline void *allocate_probes(int count) { - struct tp_probes *p = zmalloc(count * sizeof(struct probe) + struct tp_probes *p = zmalloc(count * sizeof(struct tracepoint_probe) + sizeof(struct tp_probes)); return p == NULL ? NULL : p->probes; } @@ -112,7 +113,7 @@ tracepoint_entry_add_probe(struct tracepoint_entry *entry, void *probe, void *data) { int nr_probes = 0; - struct probe *old, *new; + struct tracepoint_probe *old, *new; WARN_ON(!probe); @@ -130,7 +131,7 @@ tracepoint_entry_add_probe(struct tracepoint_entry *entry, if (new == NULL) return ERR_PTR(-ENOMEM); if (old) - memcpy(new, old, nr_probes * sizeof(struct probe)); + memcpy(new, old, nr_probes * sizeof(struct tracepoint_probe)); new[nr_probes].func = probe; new[nr_probes].data = data; new[nr_probes + 1].func = NULL; @@ -145,7 +146,7 @@ tracepoint_entry_remove_probe(struct tracepoint_entry *entry, void *probe, void *data) { int nr_probes = 0, nr_del = 0, i; - struct probe *old, *new; + struct tracepoint_probe *old, *new; old = entry->probes; @@ -265,7 +266,7 @@ static void set_tracepoint(struct tracepoint_entry **entry, * is used. */ rcu_assign_pointer(elem->probes, (*entry)->probes); - elem->state__imv = active; + elem->state = active; } /* @@ -276,7 +277,7 @@ static void set_tracepoint(struct tracepoint_entry **entry, */ static void disable_tracepoint(struct tracepoint *elem) { - elem->state__imv = 0; + elem->state = 0; rcu_assign_pointer(elem->probes, NULL); } @@ -333,22 +334,19 @@ static void tracepoint_update_probes(void) //ust// __stop___tracepoints); /* tracepoints in modules. */ lib_update_tracepoints(); - /* Update immediate values */ - core_imv_update(); -//ust// module_imv_update(); } -static struct probe * +static struct tracepoint_probe * tracepoint_add_probe(const char *name, void *probe, void *data) { struct tracepoint_entry *entry; - struct probe *old; + struct tracepoint_probe *old; entry = get_tracepoint(name); if (!entry) { entry = add_tracepoint(name); if (IS_ERR(entry)) - return (struct probe *)entry; + return (struct tracepoint_probe *)entry; } old = tracepoint_entry_add_probe(entry, probe, data); if (IS_ERR(old) && !entry->refcount) @@ -357,14 +355,14 @@ tracepoint_add_probe(const char *name, void *probe, void *data) } /** - * tracepoint_probe_register - Connect a probe to a tracepoint + * __tracepoint_probe_register - Connect a probe to a tracepoint * @name: tracepoint name * @probe: probe handler * * Returns 0 if ok, error value on error. * The probe address must at least be aligned on the architecture pointer size. */ -int tracepoint_probe_register(const char *name, void *probe, void *data) +int __tracepoint_probe_register(const char *name, void *probe, void *data) { void *old; @@ -378,7 +376,6 @@ int tracepoint_probe_register(const char *name, void *probe, void *data) release_probes(old); return 0; } -//ust// EXPORT_SYMBOL_GPL(tracepoint_probe_register); static void *tracepoint_remove_probe(const char *name, void *probe, void *data) { @@ -407,7 +404,7 @@ static void *tracepoint_remove_probe(const char *name, void *probe, void *data) * itself uses stop_machine(), which insures that every preempt disabled section * have finished. */ -int tracepoint_probe_unregister(const char *name, void *probe, void *data) +int __tracepoint_probe_unregister(const char *name, void *probe, void *data) { void *old; @@ -421,7 +418,6 @@ int tracepoint_probe_unregister(const char *name, void *probe, void *data) release_probes(old); return 0; } -//ust// EXPORT_SYMBOL_GPL(tracepoint_probe_unregister); static CDS_LIST_HEAD(old_probes); static int need_update;