From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Mon, 23 Feb 2009 11:37:07 -0500 Subject: [ltt-dev] [PATCH take2 02/13] get name and fmt from permanent eID In-Reply-To: <498A5D80.8060702@cn.fujitsu.com> References: <498A5D80.8060702@cn.fujitsu.com> Message-ID: <20090223163707.GB31815@Krystal> * Lai Jiangshan (laijs at cn.fujitsu.com) wrote: > struct marker_entry is permanent, we introduce two APIs for > getting name and fmt from eIDs. Please change the description of this patch and of patch 01 for something which includes : struct marker_entry is permanent for the duration of active tracing sessions. That means : as long as a struct marker_entry channel and event IDs can be seen by an active tracing session, it stays valid until all tracing sessions end. Otherwise just saying that "struct marker_entry is permanent" is misleading. Mathieu > > Signed-off-by: Lai Jiangshan > --- > diff --git a/include/linux/marker.h b/include/linux/marker.h > index 32387e8..2fe8977 100644 > --- a/include/linux/marker.h > +++ b/include/linux/marker.h > @@ -238,6 +238,9 @@ extern int marker_probe_unregister_private_data(marker_probe_func *probe, > extern void *marker_get_private_data(const char *channel, const char *name, > marker_probe_func *probe, int num); > > +const char *marker_get_name_form_id(u16 channel_id, u16 event_id); > +const char *marker_get_fmt_form_id(u16 channel_id, u16 event_id); > + > /* > * marker_synchronize_unregister must be called between the last marker probe > * unregistration and the end of module exit to make sure there is no caller > diff --git a/kernel/marker.c b/kernel/marker.c > index b11a82a..6a918e2 100644 > --- a/kernel/marker.c > +++ b/kernel/marker.c > @@ -997,6 +1010,40 @@ void *marker_get_private_data(const char *channel, const char *name, > } > EXPORT_SYMBOL_GPL(marker_get_private_data); > > +static struct marker_entry *get_entry_from_id(u16 channel_id, u16 event_id) > +{ > + struct hlist_head *head; > + struct hlist_node *node; > + struct marker_entry *e, *found = NULL; > + u32 hash = hash_32((channel_id << 16) | event_id, MARKER_HASH_BITS); > + > + mutex_lock(&markers_mutex); > + head = id_table + hash; > + hlist_for_each_entry(e, node, head, id_list) { > + if (e->channel_id == channel_id && e->event_id == event_id) { > + found = e; > + break; > + } > + } > + mutex_unlock(&markers_mutex); > + return found; > +} > + > +/* must call when ids/marker_entry are kept alive */ > +const char *marker_get_name_form_id(u16 channel_id, u16 event_id) > +{ > + struct marker_entry *e = get_entry_from_id(channel_id, event_id); > + return e ? e->name : NULL; > +} > +EXPORT_SYMBOL_GPL(marker_get_name_form_id); > + > +const char *marker_get_fmt_form_id(u16 channel_id, u16 event_id) > +{ > + struct marker_entry *e = get_entry_from_id(channel_id, event_id); > + return e ? e->format : NULL; > +} > +EXPORT_SYMBOL_GPL(marker_get_fmt_form_id); > + > /** > * markers_compact_event_ids: Compact markers event IDs and reassign channels > * > > > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68