diff options
author | Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | 2011-03-16 19:05:06 -0400 |
---|---|---|
committer | Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 2011-03-16 19:05:06 -0400 |
commit | ab09cc89118995d145faa593019dd6b6dcd0cbf7 (patch) | |
tree | 9a3a120f1654c1e9896d35658dae82cf3c54984d /kernel | |
parent | 55873f926bbeca07b4dbdf152b40366c15e386e2 (diff) |
markers-list-from-marker-hash-table
Markers - list from marker hash table
The marker hash table contains the correct list of markers which are enabled,
even the ones which does have a marker instance in any module. This is the table
we should dump in the trace, not the markers section, because otherwise we can
miss a marker if it's connected before its module is loaded.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/marker.c | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/kernel/marker.c b/kernel/marker.c index d853ee61804..715c26d8978 100644 --- a/kernel/marker.c +++ b/kernel/marker.c @@ -1118,40 +1118,40 @@ __initcall(init_markers); void ltt_dump_marker_state(struct ltt_trace_struct *trace) { - struct marker_iter iter; + struct marker_entry *entry; struct ltt_probe_private_data call_data; - const char *channel; + struct hlist_head *head; + struct hlist_node *node; + unsigned int i; + mutex_lock(&markers_mutex); call_data.trace = trace; call_data.serializer = NULL; - marker_iter_reset(&iter); - marker_iter_start(&iter); - for (; iter.marker != NULL; marker_iter_next(&iter)) { - if (!_imv_read(iter.marker->state)) - continue; - channel = ltt_channels_get_name_from_index( - iter.marker->channel_id); - __trace_mark(0, metadata, core_marker_id, - &call_data, - "channel %s name %s event_id %hu " - "int #1u%zu long #1u%zu pointer #1u%zu " - "size_t #1u%zu alignment #1u%u", - channel, - iter.marker->name, - iter.marker->event_id, - sizeof(int), sizeof(long), - sizeof(void *), sizeof(size_t), - ltt_get_alignment()); - if (iter.marker->format) - __trace_mark(0, metadata, - core_marker_format, + for (i = 0; i < MARKER_TABLE_SIZE; i++) { + head = &marker_table[i]; + hlist_for_each_entry(entry, node, head, hlist) { + __trace_mark(0, metadata, core_marker_id, &call_data, - "channel %s name %s format %s", - channel, - iter.marker->name, - iter.marker->format); + "channel %s name %s event_id %hu " + "int #1u%zu long #1u%zu pointer #1u%zu " + "size_t #1u%zu alignment #1u%u", + entry->channel, + entry->name, + entry->event_id, + sizeof(int), sizeof(long), + sizeof(void *), sizeof(size_t), + ltt_get_alignment()); + if (entry->format) + __trace_mark(0, metadata, + core_marker_format, + &call_data, + "channel %s name %s format %s", + entry->channel, + entry->name, + entry->format); + } } - marker_iter_stop(&iter); + mutex_unlock(&markers_mutex); } EXPORT_SYMBOL_GPL(ltt_dump_marker_state); |