X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracer.c;h=c9422c8fec5c27668552693e93acde510a0baf2d;hb=86699c2035dd69428706ade2d6dfb150ada757cb;hp=a3ace72c0811de72d9cf08824dfab2137f80f229;hpb=aa08b4413291fabcbd1b1144377d37034ad361de;p=ust.git diff --git a/libust/tracer.c b/libust/tracer.c index a3ace72..c9422c8 100644 --- a/libust/tracer.c +++ b/libust/tracer.c @@ -1,5 +1,5 @@ /* - * ltt/ltt-tracer.c + * tracer.c * * (C) Copyright 2005-2008 - * Mathieu Desnoyers (mathieu.desnoyers@polymtl.ca) @@ -18,12 +18,6 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * Tracing management internal kernel API. Trace buffer allocation/free, tracing - * start/stop. - * - * Author: - * Mathieu Desnoyers (mathieu.desnoyers@polymtl.ca) - * * Inspired from LTT : * Karim Yaghmour (karim@opersys.com) * Tom Zanussi (zanussi@us.ibm.com) @@ -37,24 +31,11 @@ * 27/05/05, Modular redesign and rewrite. */ -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include -//ust// #include +#include #include -#include +#include + #include "tracercore.h" #include "tracer.h" #include "usterr.h" @@ -65,12 +46,12 @@ /* Default callbacks for modules */ notrace int ltt_filter_control_default(enum ltt_filter_control_msg msg, - struct ltt_trace_struct *trace) + struct ust_trace *trace) { return 0; } -int ltt_statedump_default(struct ltt_trace_struct *trace) +int ltt_statedump_default(struct ust_trace *trace) { return 0; } @@ -78,21 +59,17 @@ int ltt_statedump_default(struct ltt_trace_struct *trace) /* Callbacks for registered modules */ int (*ltt_filter_control_functor) - (enum ltt_filter_control_msg msg, struct ltt_trace_struct *trace) = + (enum ltt_filter_control_msg msg, struct ust_trace *trace) = ltt_filter_control_default; struct module *ltt_filter_control_owner; /* These function pointers are protected by a trace activation check */ struct module *ltt_run_filter_owner; -int (*ltt_statedump_functor)(struct ltt_trace_struct *trace) = +int (*ltt_statedump_functor)(struct ust_trace *trace) = ltt_statedump_default; struct module *ltt_statedump_owner; -struct chan_info_struct { - const char *name; - unsigned int def_subbufsize; - unsigned int def_subbufcount; -} chan_infos[] = { +struct chan_info_struct chan_infos[] = { [LTT_CHANNEL_METADATA] = { LTT_METADATA_CHANNEL, LTT_DEFAULT_SUBBUF_SIZE_LOW, @@ -160,7 +137,7 @@ static enum ltt_channels get_channel_type_from_name(const char *name) //ust// } //ust// ltt_filter_control_functor = //ust// (int (*)(enum ltt_filter_control_msg, -//ust// struct ltt_trace_struct *))function; +//ust// struct ust_trace *))function; //ust// ltt_filter_control_owner = owner; //ust// break; //ust// case LTT_FUNCTION_STATEDUMP: @@ -169,7 +146,7 @@ static enum ltt_channels get_channel_type_from_name(const char *name) //ust// goto end; //ust// } //ust// ltt_statedump_functor = -//ust// (int (*)(struct ltt_trace_struct *))function; +//ust// (int (*)(struct ust_trace *))function; //ust// ltt_statedump_owner = owner; //ust// break; //ust// } @@ -178,7 +155,6 @@ static enum ltt_channels get_channel_type_from_name(const char *name) //ust// //ust// return ret; //ust// } -//ust// EXPORT_SYMBOL_GPL(ltt_module_register); /** * ltt_module_unregister - LTT module unregistration @@ -204,7 +180,6 @@ static enum ltt_channels get_channel_type_from_name(const char *name) //ust// } //ust// //ust// } -//ust// EXPORT_SYMBOL_GPL(ltt_module_unregister); static LIST_HEAD(ltt_transport_list); @@ -233,7 +208,6 @@ void ltt_transport_register(struct ltt_transport *transport) list_add_tail(&transport->node, <t_transport_list); ltt_unlock_traces(); } -//ust// EXPORT_SYMBOL_GPL(ltt_transport_register); /** * ltt_transport_unregister - LTT transport unregistration @@ -245,7 +219,6 @@ void ltt_transport_unregister(struct ltt_transport *transport) list_del(&transport->node); ltt_unlock_traces(); } -//ust// EXPORT_SYMBOL_GPL(ltt_transport_unregister); static inline int is_channel_overwrite(enum ltt_channels chan, enum trace_mode mode) @@ -272,30 +245,10 @@ static inline int is_channel_overwrite(enum ltt_channels chan, } } -/** - * ltt_write_trace_header - Write trace header - * @trace: Trace information - * @header: Memory address where the information must be written to - */ -void notrace ltt_write_trace_header(struct ltt_trace_struct *trace, - struct ltt_subbuffer_header *header) -{ - header->magic_number = LTT_TRACER_MAGIC_NUMBER; - header->major_version = LTT_TRACER_VERSION_MAJOR; - header->minor_version = LTT_TRACER_VERSION_MINOR; - header->arch_size = sizeof(void *); - header->alignment = ltt_get_alignment(); - header->start_time_sec = trace->start_time.tv_sec; - header->start_time_usec = trace->start_time.tv_usec; - header->start_freq = trace->start_freq; - header->freq_scale = trace->freq_scale; -} -//ust// EXPORT_SYMBOL_GPL(ltt_write_trace_header); - -static void trace_async_wakeup(struct ltt_trace_struct *trace) +static void trace_async_wakeup(struct ust_trace *trace) { int i; - struct ltt_channel_struct *chan; + struct ust_channel *chan; /* Must check each channel for pending read wakeup */ for (i = 0; i < trace->nr_channels; i++) { @@ -308,7 +261,7 @@ static void trace_async_wakeup(struct ltt_trace_struct *trace) //ust// /* Timer to send async wakeups to the readers */ //ust// static void async_wakeup(unsigned long data) //ust// { -//ust// struct ltt_trace_struct *trace; +//ust// struct ust_trace *trace; //ust// //ust// /* //ust// * PREEMPT_RT does not allow spinlocks to be taken within preempt @@ -340,9 +293,9 @@ static void trace_async_wakeup(struct ltt_trace_struct *trace) * * Returns a pointer to the trace structure, NULL if not found. */ -struct ltt_trace_struct *_ltt_trace_find(const char *trace_name) +struct ust_trace *_ltt_trace_find(const char *trace_name) { - struct ltt_trace_struct *trace; + struct ust_trace *trace; list_for_each_entry(trace, <t_traces.head, list) if (!strncmp(trace->trace_name, trace_name, NAME_MAX)) @@ -356,9 +309,9 @@ struct ltt_trace_struct *_ltt_trace_find(const char *trace_name) * * Returns a pointer to the trace structure, NULL if not found. */ -struct ltt_trace_struct *_ltt_trace_find_setup(const char *trace_name) +struct ust_trace *_ltt_trace_find_setup(const char *trace_name) { - struct ltt_trace_struct *trace; + struct ust_trace *trace; list_for_each_entry(trace, <t_traces.setup_head, list) if (!strncmp(trace->trace_name, trace_name, NAME_MAX)) @@ -366,7 +319,6 @@ struct ltt_trace_struct *_ltt_trace_find_setup(const char *trace_name) return NULL; } -//ust// EXPORT_SYMBOL_GPL(_ltt_trace_find_setup); /** * ltt_release_transport - Release an LTT transport @@ -374,11 +326,10 @@ struct ltt_trace_struct *_ltt_trace_find_setup(const char *trace_name) */ void ltt_release_transport(struct kref *kref) { -//ust// struct ltt_trace_struct *trace = container_of(kref, -//ust// struct ltt_trace_struct, ltt_transport_kref); +//ust// struct ust_trace *trace = container_of(kref, +//ust// struct ust_trace, ltt_transport_kref); //ust// trace->ops->remove_dirs(trace); } -//ust// EXPORT_SYMBOL_GPL(ltt_release_transport); /** * ltt_release_trace - Release a LTT trace @@ -386,16 +337,19 @@ void ltt_release_transport(struct kref *kref) */ void ltt_release_trace(struct kref *kref) { - struct ltt_trace_struct *trace = container_of(kref, - struct ltt_trace_struct, kref); + struct ust_trace *trace = _ust_container_of(kref, + struct ust_trace, kref); ltt_channels_trace_free(trace->channels); - kfree(trace); + free(trace); } -//ust// EXPORT_SYMBOL_GPL(ltt_release_trace); static inline void prepare_chan_size_num(unsigned int *subbuf_size, unsigned int *n_subbufs) { + /* Make sure the subbuffer size is larger than a page */ + *subbuf_size = max_t(unsigned int, *subbuf_size, PAGE_SIZE); + + /* round to next power of 2 */ *subbuf_size = 1 << get_count_order(*subbuf_size); *n_subbufs = 1 << get_count_order(*n_subbufs); @@ -407,40 +361,35 @@ static inline void prepare_chan_size_num(unsigned int *subbuf_size, int _ltt_trace_setup(const char *trace_name) { int err = 0; - struct ltt_trace_struct *new_trace = NULL; + struct ust_trace *new_trace = NULL; int metadata_index; unsigned int chan; enum ltt_channels chantype; if (_ltt_trace_find_setup(trace_name)) { - printk(KERN_ERR "LTT : Trace name %s already used.\n", - trace_name); + ERR("Trace name %s already used", trace_name); err = -EEXIST; goto traces_error; } if (_ltt_trace_find(trace_name)) { - printk(KERN_ERR "LTT : Trace name %s already used.\n", - trace_name); + ERR("Trace name %s already used", trace_name); err = -EEXIST; goto traces_error; } - new_trace = kzalloc(sizeof(struct ltt_trace_struct), GFP_KERNEL); + new_trace = zmalloc(sizeof(struct ust_trace)); if (!new_trace) { - printk(KERN_ERR - "LTT : Unable to allocate memory for trace %s\n", - trace_name); + ERR("Unable to allocate memory for trace %s", trace_name); err = -ENOMEM; goto traces_error; } strncpy(new_trace->trace_name, trace_name, NAME_MAX); new_trace->channels = ltt_channels_trace_alloc(&new_trace->nr_channels, - 0, 1); + ust_channels_overwrite_by_default, + ust_channels_request_collection_by_default, 1); if (!new_trace->channels) { - printk(KERN_ERR - "LTT : Unable to allocate memory for chaninfo %s\n", - trace_name); + ERR("Unable to allocate memory for chaninfo %s\n", trace_name); err = -ENOMEM; goto trace_free; } @@ -472,11 +421,10 @@ int _ltt_trace_setup(const char *trace_name) return 0; trace_free: - kfree(new_trace); + free(new_trace); traces_error: return err; } -//ust// EXPORT_SYMBOL_GPL(_ltt_trace_setup); int ltt_trace_setup(const char *trace_name) @@ -487,26 +435,25 @@ int ltt_trace_setup(const char *trace_name) ltt_unlock_traces(); return ret; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_setup); /* must be called from within a traces lock. */ -static void _ltt_trace_free(struct ltt_trace_struct *trace) +static void _ltt_trace_free(struct ust_trace *trace) { list_del(&trace->list); - kfree(trace); + free(trace); } int ltt_trace_set_type(const char *trace_name, const char *trace_type) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; struct ltt_transport *tran_iter, *transport = NULL; ltt_lock_traces(); trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } @@ -518,8 +465,7 @@ int ltt_trace_set_type(const char *trace_name, const char *trace_type) } } if (!transport) { - printk(KERN_ERR "LTT : Transport %s is not present.\n", - trace_type); + ERR("Transport %s is not present", trace_type); err = -EINVAL; goto traces_error; } @@ -530,27 +476,26 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_set_type); int ltt_trace_set_channel_subbufsize(const char *trace_name, const char *channel_name, unsigned int size) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; int index; ltt_lock_traces(); trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } index = ltt_channels_get_index_from_name(channel_name); if (index < 0) { - printk(KERN_ERR "LTT : Channel %s not found\n", channel_name); + ERR("Channel %s not found", channel_name); err = -ENOENT; goto traces_error; } @@ -560,27 +505,26 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_set_channel_subbufsize); int ltt_trace_set_channel_subbufcount(const char *trace_name, const char *channel_name, unsigned int cnt) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; int index; ltt_lock_traces(); trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } index = ltt_channels_get_index_from_name(channel_name); if (index < 0) { - printk(KERN_ERR "LTT : Channel %s not found\n", channel_name); + ERR("Channel %s not found", channel_name); err = -ENOENT; goto traces_error; } @@ -590,20 +534,19 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_set_channel_subbufcount); int ltt_trace_set_channel_enable(const char *trace_name, const char *channel_name, unsigned int enable) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; int index; ltt_lock_traces(); trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } @@ -613,14 +556,14 @@ int ltt_trace_set_channel_enable(const char *trace_name, * read the trace, we always enable this channel. */ if (!enable && !strcmp(channel_name, "metadata")) { - printk(KERN_ERR "LTT : Trying to disable metadata channel\n"); + ERR("Trying to disable metadata channel"); err = -EINVAL; goto traces_error; } index = ltt_channels_get_index_from_name(channel_name); if (index < 0) { - printk(KERN_ERR "LTT : Channel %s not found\n", channel_name); + ERR("Channel %s not found", channel_name); err = -ENOENT; goto traces_error; } @@ -631,20 +574,19 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_set_channel_enable); int ltt_trace_set_channel_overwrite(const char *trace_name, const char *channel_name, unsigned int overwrite) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; int index; ltt_lock_traces(); trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } @@ -656,15 +598,14 @@ int ltt_trace_set_channel_overwrite(const char *trace_name, * able to read the trace. */ if (overwrite && !strcmp(channel_name, "metadata")) { - printk(KERN_ERR "LTT : Trying to set metadata channel to " - "overwrite mode\n"); + ERR("Trying to set metadata channel to overwrite mode"); err = -EINVAL; goto traces_error; } index = ltt_channels_get_index_from_name(channel_name); if (index < 0) { - printk(KERN_ERR "LTT : Channel %s not found\n", channel_name); + ERR("Channel %s not found", channel_name); err = -ENOENT; goto traces_error; } @@ -675,12 +616,11 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_set_channel_overwrite); int ltt_trace_alloc(const char *trace_name) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; unsigned int subbuf_size, subbuf_cnt; //ust// unsigned long flags; int chan; @@ -688,9 +628,14 @@ int ltt_trace_alloc(const char *trace_name) ltt_lock_traces(); + if (_ltt_trace_find(trace_name)) { /* Trace already allocated */ + err = 1; + goto traces_error; + } + trace = _ltt_trace_find_setup(trace_name); if (!trace) { - printk(KERN_ERR "LTT : Trace not found %s\n", trace_name); + ERR("Trace not found %s", trace_name); err = -ENOENT; goto traces_error; } @@ -703,12 +648,12 @@ int ltt_trace_alloc(const char *trace_name) trace->freq_scale = trace_clock_freq_scale(); if (!trace->transport) { - printk(KERN_ERR "LTT : Transport is not set.\n"); + ERR("Transport is not set"); err = -EINVAL; goto transport_error; } //ust// if (!try_module_get(trace->transport->owner)) { -//ust// printk(KERN_ERR "LTT : Can't lock transport module.\n"); +//ust// ERR("Can't lock transport module"); //ust// err = -ENODEV; //ust// goto transport_error; //ust// } @@ -716,15 +661,14 @@ int ltt_trace_alloc(const char *trace_name) //ust// err = trace->ops->create_dirs(trace); //ust// if (err) { -//ust// printk(KERN_ERR "LTT : Can't create dir for trace %s.\n", -//ust// trace_name); +//ust// ERR("Can't create dir for trace %s", trace_name); //ust// goto dirs_error; //ust// } //ust// local_irq_save(flags); trace->start_freq = trace_clock_frequency(); trace->start_tsc = trace_clock_read64(); - gettimeofday(&trace->start_time, NULL); //ust// changed + gettimeofday(&trace->start_time, NULL); //ust// changed /* FIXME: is this ok? */ //ust// local_irq_restore(flags); for (chan = 0; chan < trace->nr_channels; chan++) { @@ -737,15 +681,13 @@ int ltt_trace_alloc(const char *trace_name) subbuf_cnt = trace->channels[chan].subbuf_cnt; prepare_chan_size_num(&subbuf_size, &subbuf_cnt); err = trace->ops->create_channel(trace_name, trace, - trace->dentry.trace_root, channel_name, &trace->channels[chan], subbuf_size, subbuf_cnt, trace->channels[chan].overwrite); if (err != 0) { - printk(KERN_ERR "LTT : Can't create channel %s.\n", - channel_name); + ERR("Cannot create channel %s", channel_name); goto create_channel_error; } } @@ -776,7 +718,6 @@ traces_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_alloc); /* * It is worked as a wrapper for current version of ltt_control.ko. @@ -807,7 +748,7 @@ traces_error: //ust// } /* Must be called while sure that trace is in the list. */ -static int _ltt_trace_destroy(struct ltt_trace_struct *trace) +static int _ltt_trace_destroy(struct ust_trace *trace) { int err = -EPERM; @@ -816,9 +757,7 @@ static int _ltt_trace_destroy(struct ltt_trace_struct *trace) goto traces_error; } if (trace->active) { - printk(KERN_ERR - "LTT : Can't destroy trace %s : tracer is active\n", - trace->trace_name); + ERR("Can't destroy trace %s : tracer is active", trace->trace_name); err = -EBUSY; goto active_error; } @@ -843,15 +782,17 @@ traces_error: } /* Sleepable part of the destroy */ -static void __ltt_trace_destroy(struct ltt_trace_struct *trace) +static void __ltt_trace_destroy(struct ust_trace *trace, int drop) { int i; - struct ltt_channel_struct *chan; + struct ust_channel *chan; - for (i = 0; i < trace->nr_channels; i++) { - chan = &trace->channels[i]; - if (chan->active) - trace->ops->finish_channel(chan); + if(!drop) { + for (i = 0; i < trace->nr_channels; i++) { + chan = &trace->channels[i]; + if (chan->active) + trace->ops->finish_channel(chan); + } } return; /* FIXME: temporary for ust */ @@ -886,10 +827,10 @@ static void __ltt_trace_destroy(struct ltt_trace_struct *trace) kref_put(&trace->kref, ltt_release_trace); } -int ltt_trace_destroy(const char *trace_name) +int ltt_trace_destroy(const char *trace_name, int drop) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; ltt_lock_traces(); @@ -901,7 +842,7 @@ int ltt_trace_destroy(const char *trace_name) ltt_unlock_traces(); - __ltt_trace_destroy(trace); + __ltt_trace_destroy(trace, drop); //ust// put_trace_clock(); return 0; @@ -921,10 +862,9 @@ error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_destroy); /* must be called from within a traces lock. */ -static int _ltt_trace_start(struct ltt_trace_struct *trace) +static int _ltt_trace_start(struct ust_trace *trace) { int err = 0; @@ -933,11 +873,10 @@ static int _ltt_trace_start(struct ltt_trace_struct *trace) goto traces_error; } if (trace->active) - printk(KERN_INFO "LTT : Tracing already active for trace %s\n", - trace->trace_name); + DBG("Tracing already active for trace %s", trace->trace_name); //ust// if (!try_module_get(ltt_run_filter_owner)) { //ust// err = -ENODEV; -//ust// printk(KERN_ERR "LTT : Can't lock filter module.\n"); +//ust// ERR("Cannot lock filter module"); //ust// goto get_ltt_run_filter_error; //ust// } trace->active = 1; @@ -954,7 +893,7 @@ traces_error: int ltt_trace_start(const char *trace_name) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; ltt_lock_traces(); @@ -977,8 +916,7 @@ int ltt_trace_start(const char *trace_name) //ust// if (!try_module_get(ltt_statedump_owner)) { //ust// err = -ENODEV; -//ust// printk(KERN_ERR -//ust// "LTT : Can't lock state dump module.\n"); +//ust// ERR("Cannot lock state dump module"); //ust// } else { ltt_statedump_functor(trace); //ust// module_put(ltt_statedump_owner); @@ -991,10 +929,9 @@ no_trace: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_start); /* must be called from within traces lock */ -static int _ltt_trace_stop(struct ltt_trace_struct *trace) +static int _ltt_trace_stop(struct ust_trace *trace) { int err = -EPERM; @@ -1003,8 +940,7 @@ static int _ltt_trace_stop(struct ltt_trace_struct *trace) goto traces_error; } if (!trace->active) - printk(KERN_INFO "LTT : Tracing not active for trace %s\n", - trace->trace_name); + DBG("LTT : Tracing not active for trace %s", trace->trace_name); if (trace->active) { trace->active = 0; ltt_traces.num_active_traces--; @@ -1022,7 +958,7 @@ traces_error: int ltt_trace_stop(const char *trace_name) { int err = 0; - struct ltt_trace_struct *trace; + struct ust_trace *trace; ltt_lock_traces(); trace = _ltt_trace_find(trace_name); @@ -1030,49 +966,6 @@ int ltt_trace_stop(const char *trace_name) ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_trace_stop); - -/** - * ltt_control - Trace control in-kernel API - * @msg: Action to perform - * @trace_name: Trace on which the action must be done - * @trace_type: Type of trace (normal, flight, hybrid) - * @args: Arguments specific to the action - */ -//ust// int ltt_control(enum ltt_control_msg msg, const char *trace_name, -//ust// const char *trace_type, union ltt_control_args args) -//ust// { -//ust// int err = -EPERM; -//ust// -//ust// printk(KERN_ALERT "ltt_control : trace %s\n", trace_name); -//ust// switch (msg) { -//ust// case LTT_CONTROL_START: -//ust// printk(KERN_DEBUG "Start tracing %s\n", trace_name); -//ust// err = ltt_trace_start(trace_name); -//ust// break; -//ust// case LTT_CONTROL_STOP: -//ust// printk(KERN_DEBUG "Stop tracing %s\n", trace_name); -//ust// err = ltt_trace_stop(trace_name); -//ust// break; -//ust// case LTT_CONTROL_CREATE_TRACE: -//ust// printk(KERN_DEBUG "Creating trace %s\n", trace_name); -//ust// err = ltt_trace_create(trace_name, trace_type, -//ust// args.new_trace.mode, -//ust// args.new_trace.subbuf_size_low, -//ust// args.new_trace.n_subbufs_low, -//ust// args.new_trace.subbuf_size_med, -//ust// args.new_trace.n_subbufs_med, -//ust// args.new_trace.subbuf_size_high, -//ust// args.new_trace.n_subbufs_high); -//ust// break; -//ust// case LTT_CONTROL_DESTROY_TRACE: -//ust// printk(KERN_DEBUG "Destroying trace %s\n", trace_name); -//ust// err = ltt_trace_destroy(trace_name); -//ust// break; -//ust// } -//ust// return err; -//ust// } -//ust// EXPORT_SYMBOL_GPL(ltt_control); /** * ltt_filter_control - Trace filter control in-kernel API @@ -1082,14 +975,13 @@ int ltt_trace_stop(const char *trace_name) int ltt_filter_control(enum ltt_filter_control_msg msg, const char *trace_name) { int err; - struct ltt_trace_struct *trace; + struct ust_trace *trace; - printk(KERN_DEBUG "ltt_filter_control : trace %s\n", trace_name); + DBG("ltt_filter_control : trace %s", trace_name); ltt_lock_traces(); trace = _ltt_trace_find(trace_name); if (trace == NULL) { - printk(KERN_ALERT - "Trace does not exist. Cannot proxy control request\n"); + ERR("Trace does not exist. Cannot proxy control request"); err = -ENOENT; goto trace_error; } @@ -1099,13 +991,11 @@ int ltt_filter_control(enum ltt_filter_control_msg msg, const char *trace_name) //ust// } switch (msg) { case LTT_FILTER_DEFAULT_ACCEPT: - printk(KERN_DEBUG - "Proxy filter default accept %s\n", trace_name); + DBG("Proxy filter default accept %s", trace_name); err = (*ltt_filter_control_functor)(msg, trace); break; case LTT_FILTER_DEFAULT_REJECT: - printk(KERN_DEBUG - "Proxy filter default reject %s\n", trace_name); + DBG("Proxy filter default reject %s", trace_name); err = (*ltt_filter_control_functor)(msg, trace); break; default: @@ -1118,47 +1008,3 @@ trace_error: ltt_unlock_traces(); return err; } -//ust// EXPORT_SYMBOL_GPL(ltt_filter_control); - -//ust// int __init ltt_init(void) -//ust// { -//ust// /* Make sure no page fault can be triggered by this module */ -//ust// vmalloc_sync_all(); -//ust// return 0; -//ust// } - -//ust// module_init(ltt_init) - -//ust// static void __exit ltt_exit(void) -//ust// { -//ust// struct ltt_trace_struct *trace; -//ust// struct list_head *pos, *n; -//ust// -//ust// ltt_lock_traces(); -//ust// /* Stop each trace, currently being read by RCU read-side */ -//ust// list_for_each_entry_rcu(trace, <t_traces.head, list) -//ust// _ltt_trace_stop(trace); -//ust// /* Wait for quiescent state. Readers have preemption disabled. */ -//ust// synchronize_sched(); -//ust// /* Safe iteration is now permitted. It does not have to be RCU-safe -//ust// * because no readers are left. */ -//ust// list_for_each_safe(pos, n, <t_traces.head) { -//ust// trace = container_of(pos, struct ltt_trace_struct, list); -//ust// /* _ltt_trace_destroy does a synchronize_sched() */ -//ust// _ltt_trace_destroy(trace); -//ust// __ltt_trace_destroy(trace); -//ust// } -//ust// /* free traces in pre-alloc status */ -//ust// list_for_each_safe(pos, n, <t_traces.setup_head) { -//ust// trace = container_of(pos, struct ltt_trace_struct, list); -//ust// _ltt_trace_free(trace); -//ust// } -//ust// -//ust// ltt_unlock_traces(); -//ust// } - -//ust// module_exit(ltt_exit) - -//ust// MODULE_LICENSE("GPL"); -//ust// MODULE_AUTHOR("Mathieu Desnoyers"); -//ust// MODULE_DESCRIPTION("Linux Trace Toolkit Next Generation Tracer Kernel API");