summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2011-03-16 19:05:06 -0400
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2011-03-16 19:05:06 -0400
commitab09cc89118995d145faa593019dd6b6dcd0cbf7 (patch)
tree9a3a120f1654c1e9896d35658dae82cf3c54984d /kernel
parent55873f926bbeca07b4dbdf152b40366c15e386e2 (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.c56
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);