Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
 1// SPDX-License-Identifier: LGPL-2.1
 2/*
 3 * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
 4 */
 5#include <stdio.h>
 6#include <stdlib.h>
 7#include <string.h>
 8
 9#include "event-parse.h"
10#include "trace-seq.h"
11
12static int call_site_handler(struct trace_seq *s, struct tep_record *record,
13			     struct tep_event *event, void *context)
14{
15	struct tep_format_field *field;
16	unsigned long long val, addr;
17	void *data = record->data;
18	const char *func;
19
20	field = tep_find_field(event, "call_site");
21	if (!field)
22		return 1;
23
24	if (tep_read_number_field(field, data, &val))
25		return 1;
26
27	func = tep_find_function(event->tep, val);
28	if (!func)
29		return 1;
30
31	addr = tep_find_function_address(event->tep, val);
32
33	trace_seq_printf(s, "(%s+0x%x) ", func, (int)(val - addr));
34	return 1;
35}
36
37int TEP_PLUGIN_LOADER(struct tep_handle *tep)
38{
39	tep_register_event_handler(tep, -1, "kmem", "kfree",
40				   call_site_handler, NULL);
41
42	tep_register_event_handler(tep, -1, "kmem", "kmalloc",
43				   call_site_handler, NULL);
44
45	tep_register_event_handler(tep, -1, "kmem", "kmalloc_node",
46				   call_site_handler, NULL);
47
48	tep_register_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
49				   call_site_handler, NULL);
50
51	tep_register_event_handler(tep, -1, "kmem",
52				   "kmem_cache_alloc_node",
53				   call_site_handler, NULL);
54
55	tep_register_event_handler(tep, -1, "kmem", "kmem_cache_free",
56				   call_site_handler, NULL);
57	return 0;
58}
59
60void TEP_PLUGIN_UNLOADER(struct tep_handle *tep)
61{
62	tep_unregister_event_handler(tep, -1, "kmem", "kfree",
63				     call_site_handler, NULL);
64
65	tep_unregister_event_handler(tep, -1, "kmem", "kmalloc",
66				     call_site_handler, NULL);
67
68	tep_unregister_event_handler(tep, -1, "kmem", "kmalloc_node",
69				     call_site_handler, NULL);
70
71	tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_alloc",
72				     call_site_handler, NULL);
73
74	tep_unregister_event_handler(tep, -1, "kmem",
75				     "kmem_cache_alloc_node",
76				     call_site_handler, NULL);
77
78	tep_unregister_event_handler(tep, -1, "kmem", "kmem_cache_free",
79				     call_site_handler, NULL);
80}