]> Git Repo - linux.git/blob - tools/lib/traceevent/plugins/plugin_kmem.c
enetc: Migrate to PHYLINK and PCS_LYNX
[linux.git] / tools / lib / traceevent / plugins / plugin_kmem.c
1 // SPDX-License-Identifier: LGPL-2.1
2 /*
3  * Copyright (C) 2009 Red Hat Inc, Steven Rostedt <[email protected]>
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
12 static 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
37 int 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
60 void 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 }
This page took 0.038517 seconds and 4 git commands to generate.