X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=33827fdc9026aa0002bec893c3f20867c820c700;hb=535b0d0af1b6421ceb83e22821e85bc6919d16d9;hp=ef60639897e3858477193053e15eaebb6a26ee3d;hpb=f36c12ab311c7db808bfeda93bb95022020110cd;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index ef60639..33827fd 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -1,10 +1,10 @@ /* - * Copyright (C) 2007 Mathieu Desnoyers + * Copyright (C) 2007-2011 Mathieu Desnoyers * * 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 @@ -16,16 +16,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _LGPL_SOURCE #include #include -#define _LGPL_SOURCE #include #include #include #include #include +#include #include +#include #include "usterr_signal_safe.h" #include "channels.h" @@ -64,9 +66,9 @@ void unlock_ust_marker(void) * ust_marker hash table, containing the active ust_marker. * Protected by module_mutex. */ -#define ust_marker_HASH_BITS 6 -#define ust_marker_TABLE_SIZE (1 << ust_marker_HASH_BITS) -static struct cds_hlist_head ust_marker_table[ust_marker_TABLE_SIZE]; +#define UST_MARKER_HASH_BITS 6 +#define UST_MARKER_TABLE_SIZE (1 << UST_MARKER_HASH_BITS) +static struct cds_hlist_head ust_marker_table[UST_MARKER_TABLE_SIZE]; /* * Note about RCU : @@ -81,7 +83,7 @@ struct ust_marker_entry { char *format; char *name; /* Probe wrapper */ - void (*call)(const struct ust_marker *mdata, void *call_private, struct registers *regs, ...); + void (*call)(const struct ust_marker *mdata, void *call_private, ...); struct ust_marker_probe_closure single; struct ust_marker_probe_closure *multi; int refcount; /* Number of times armed. 0 if disarmed. */ @@ -118,7 +120,7 @@ static void ust_marker_update_processes(void) * execution flow of preemptible code. */ notrace void __ust_marker_empty_function(const struct ust_marker *mdata, - void *probe_private, struct registers *regs, void *call_private, const char *fmt, va_list *args) + void *probe_private, void *call_private, const char *fmt, va_list *args) { } //ust// EXPORT_SYMBOL_GPL(__ust_marker_empty_function); @@ -134,7 +136,7 @@ notrace void __ust_marker_empty_function(const struct ust_marker *mdata, * rcu_dereference() for the pointer read. */ notrace void ust_marker_probe_cb(const struct ust_marker *mdata, - void *call_private, struct registers *regs, ...) + void *call_private, ...) { va_list args; char ptype; @@ -155,8 +157,8 @@ notrace void ust_marker_probe_cb(const struct ust_marker *mdata, /* Must read the ptr before private data. They are not data * dependant, so we put an explicit cmm_smp_rmb() here. */ cmm_smp_rmb(); - va_start(args, regs); - func(mdata, mdata->single.probe_private, regs, call_private, + va_start(args, call_private); + func(mdata, mdata->single.probe_private, call_private, mdata->format, &args); va_end(args); } else { @@ -176,9 +178,9 @@ notrace void ust_marker_probe_cb(const struct ust_marker *mdata, */ cmm_smp_read_barrier_depends(); for (i = 0; multi[i].func; i++) { - va_start(args, regs); + va_start(args, call_private); multi[i].func(mdata, multi[i].probe_private, - regs, call_private, mdata->format, &args); + call_private, mdata->format, &args); va_end(args); } } @@ -195,7 +197,7 @@ notrace void ust_marker_probe_cb(const struct ust_marker *mdata, * Should be connected to ust_marker "UST_MARKER_NOARGS". */ static notrace void ust_marker_probe_cb_noarg(const struct ust_marker *mdata, - void *call_private, struct registers *regs, ...) + void *call_private, ...) { va_list args; /* not initialized */ char ptype; @@ -211,7 +213,7 @@ static notrace void ust_marker_probe_cb_noarg(const struct ust_marker *mdata, /* Must read the ptr before private data. They are not data * dependant, so we put an explicit cmm_smp_rmb() here. */ cmm_smp_rmb(); - func(mdata, mdata->single.probe_private, regs, call_private, + func(mdata, mdata->single.probe_private, call_private, mdata->format, &args); } else { struct ust_marker_probe_closure *multi; @@ -230,7 +232,7 @@ static notrace void ust_marker_probe_cb_noarg(const struct ust_marker *mdata, */ cmm_smp_read_barrier_depends(); for (i = 0; multi[i].func; i++) - multi[i].func(mdata, multi[i].probe_private, regs, + multi[i].func(mdata, multi[i].probe_private, call_private, mdata->format, &args); } //ust// rcu_read_unlock_sched_notrace(); @@ -397,7 +399,7 @@ static struct ust_marker_entry *get_ust_marker(const char *channel, const char * u32 hash; hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); - head = &ust_marker_table[hash & ((1 << ust_marker_HASH_BITS)-1)]; + head = &ust_marker_table[hash & ((1 << UST_MARKER_HASH_BITS)-1)]; cds_hlist_for_each_entry(e, node, head, hlist) { if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) return e; @@ -423,7 +425,7 @@ static struct ust_marker_entry *add_ust_marker(const char *channel, const char * hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); if (format) format_len = strlen(format) + 1; - head = &ust_marker_table[hash & ((1 << ust_marker_HASH_BITS)-1)]; + head = &ust_marker_table[hash & ((1 << UST_MARKER_HASH_BITS)-1)]; cds_hlist_for_each_entry(e, node, head, hlist) { if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { DBG("ust_marker %s.%s busy", channel, name); @@ -482,7 +484,7 @@ static int remove_ust_marker(const char *channel, const char *name) int ret; hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); - head = &ust_marker_table[hash & ((1 << ust_marker_HASH_BITS)-1)]; + head = &ust_marker_table[hash & ((1 << UST_MARKER_HASH_BITS)-1)]; cds_hlist_for_each_entry(e, node, head, hlist) { if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { found = 1; @@ -899,7 +901,7 @@ get_ust_marker_from_private_data(ust_marker_probe_func *probe, void *probe_priva struct cds_hlist_head *head; struct cds_hlist_node *node; - for (i = 0; i < ust_marker_TABLE_SIZE; i++) { + for (i = 0; i < UST_MARKER_TABLE_SIZE; i++) { head = &ust_marker_table[i]; cds_hlist_for_each_entry(entry, node, head, hlist) { if (!entry->ptype) { @@ -1006,7 +1008,7 @@ void *ust_marker_get_private_data(const char *channel, const char *name, u32 hash; hash = jhash(channel, channel_len-1, 0) ^ jhash(name, name_len-1, 0); - head = &ust_marker_table[hash & ((1 << ust_marker_HASH_BITS)-1)]; + head = &ust_marker_table[hash & ((1 << UST_MARKER_HASH_BITS)-1)]; cds_hlist_for_each_entry(e, node, head, hlist) { if (!strcmp(channel, e->channel) && !strcmp(name, e->name)) { if (!e->ptype) { @@ -1044,7 +1046,7 @@ void *ust_marker_get_private_data(const char *channel, const char *name, //ust// struct hlist_node *node; //ust// int ret; //ust// -//ust// for (i = 0; i < ust_marker_TABLE_SIZE; i++) { +//ust// for (i = 0; i < UST_MARKER_TABLE_SIZE; i++) { //ust// head = &ust_marker_table[i]; //ust// hlist_for_each_entry(entry, node, head, hlist) { //ust// ret = ltt_channels_get_index_from_name(entry->channel); @@ -1207,7 +1209,7 @@ static void free_user_ust_marker(char __user *state, struct cds_hlist_head *head //ust// } //ust// } //ust// } -//ust// clear_thread_flag(TIF_ust_marker_PENDING); +//ust// clear_thread_flag(TIF_UST_MARKER_PENDING); //ust// pthread_mutex_unlock(¤t->group_leader->user_ust_marker_mutex); //ust// pthread_mutex_unlock(&ust_marker_mutex); //ust// } @@ -1291,7 +1293,7 @@ void ltt_dump_ust_marker_state(struct ust_trace *trace) call_data.trace = trace; call_data.serializer = NULL; - for (i = 0; i < ust_marker_TABLE_SIZE; i++) { + for (i = 0; i < UST_MARKER_TABLE_SIZE; i++) { head = &ust_marker_table[i]; cds_hlist_for_each_entry(entry, node, head, hlist) { __ust_marker(metadata, core_marker_id,