X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracepoint.h;h=b1ee16d0c7dd6989fc428062cb3d168cd74ce38f;hb=6af64c431c0a521fc927fa72b9f4015397ce11d4;hp=6f14ea08a696f43428e615fccfb00eda12a90759;hpb=b4512257eb71d0432554047acf6278dc42a15a75;p=ust.git diff --git a/libust/tracepoint.h b/libust/tracepoint.h index 6f14ea0..b1ee16d 100644 --- a/libust/tracepoint.h +++ b/libust/tracepoint.h @@ -5,19 +5,19 @@ * Copyright (C) 2008 Mathieu Desnoyers * Copyright (C) 2009 Pierre-Marc Fournier * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * 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. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Heavily inspired from the Linux Kernel Markers. * @@ -28,6 +28,9 @@ //#include //#include +#define _LGPL_SOURCE +#include + #include "immediate.h" #include "kernelcompat.h" @@ -48,7 +51,8 @@ struct tracepoint { #define TPPROTO(args...) args #define TPARGS(args...) args -//ust// #ifdef CONFIG_TRACEPOINTS +#define CONFIG_TRACEPOINTS +#ifdef CONFIG_TRACEPOINTS /* * it_func[0] is never NULL because there is at least one element in the array @@ -58,14 +62,14 @@ struct tracepoint { do { \ void **it_func; \ \ - rcu_read_lock_sched_notrace(); \ + rcu_read_lock(); /*ust rcu_read_lock_sched_notrace(); */ \ it_func = rcu_dereference((tp)->funcs); \ if (it_func) { \ do { \ ((void(*)(proto))(*it_func))(args); \ } while (*(++it_func)); \ } \ - rcu_read_unlock_sched_notrace(); \ + rcu_read_unlock(); /*ust rcu_read_unlock_sched_notrace(); */ \ } while (0) #define __CHECK_TRACE(name, generic, proto, args) \ @@ -125,29 +129,29 @@ struct tracepoint { extern void tracepoint_update_probe_range(struct tracepoint *begin, struct tracepoint *end); -//ust// #else /* !CONFIG_TRACEPOINTS */ -//ust// #define DECLARE_TRACE(name, proto, args) \ -//ust// static inline void trace_##name(proto) \ -//ust// { } \ -//ust// static inline void _trace_##name(proto) \ -//ust// { } \ -//ust// static inline int register_trace_##name(void (*probe)(proto)) \ -//ust// { \ -//ust// return -ENOSYS; \ -//ust// } \ -//ust// static inline int unregister_trace_##name(void (*probe)(proto)) \ -//ust// { \ -//ust// return -ENOSYS; \ -//ust// } -//ust// -//ust// #define DEFINE_TRACE(name) -//ust// #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) -//ust// #define EXPORT_TRACEPOINT_SYMBOL(name) -//ust// -//ust// static inline void tracepoint_update_probe_range(struct tracepoint *begin, -//ust// struct tracepoint *end) -//ust// { } -//ust// #endif /* CONFIG_TRACEPOINTS */ +#else /* !CONFIG_TRACEPOINTS */ +#define DECLARE_TRACE(name, proto, args) \ + static inline void trace_##name(proto) \ + { } \ + static inline void _trace_##name(proto) \ + { } \ + static inline int register_trace_##name(void (*probe)(proto)) \ + { \ + return -ENOSYS; \ + } \ + static inline int unregister_trace_##name(void (*probe)(proto)) \ + { \ + return -ENOSYS; \ + } + +#define DEFINE_TRACE(name) +#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) +#define EXPORT_TRACEPOINT_SYMBOL(name) + +static inline void tracepoint_update_probe_range(struct tracepoint *begin, + struct tracepoint *end) +{ } +#endif /* CONFIG_TRACEPOINTS */ /* * Connect a probe to a tracepoint. @@ -185,7 +189,7 @@ extern int tracepoint_get_iter_range(struct tracepoint **tracepoint, */ static inline void tracepoint_synchronize_unregister(void) { - synchronize_sched(); +//ust// synchronize_sched(); } struct tracepoint_lib { @@ -194,12 +198,16 @@ struct tracepoint_lib { struct list_head list; }; -#define TRACEPOINT_LIB \ -extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); \ -extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \ - \ -static void __attribute__((constructor)) __tracepoints__init(void) \ -{ \ - tracepoint_register_lib(__start___tracepoints, (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint));\ -} +extern int tracepoint_register_lib(struct tracepoint *tracepoints_start, + int tracepoints_count); + +#define TRACEPOINT_LIB \ + extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); \ + extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \ + static void __attribute__((constructor)) __tracepoints__init(void) \ + { \ + tracepoint_register_lib(__start___tracepoints, \ + (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint)); \ + } + #endif