kmemtrace: Core implementation.
[linux-2.6] / include / linux / kmemtrace.h
1 /*
2  * Copyright (C) 2008 Eduard - Gabriel Munteanu
3  *
4  * This file is released under GPL version 2.
5  */
6
7 #ifndef _LINUX_KMEMTRACE_H
8 #define _LINUX_KMEMTRACE_H
9
10 #ifdef __KERNEL__
11
12 #include <linux/types.h>
13 #include <linux/marker.h>
14
15 enum kmemtrace_type_id {
16         KMEMTRACE_TYPE_KMALLOC = 0,     /* kmalloc() or kfree(). */
17         KMEMTRACE_TYPE_CACHE,           /* kmem_cache_*(). */
18         KMEMTRACE_TYPE_PAGES,           /* __get_free_pages() and friends. */
19 };
20
21 #ifdef CONFIG_KMEMTRACE
22
23 extern void kmemtrace_init(void);
24
25 static inline void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id,
26                                              unsigned long call_site,
27                                              const void *ptr,
28                                              size_t bytes_req,
29                                              size_t bytes_alloc,
30                                              gfp_t gfp_flags,
31                                              int node)
32 {
33         trace_mark(kmemtrace_alloc, "type_id %d call_site %lu ptr %lu "
34                    "bytes_req %lu bytes_alloc %lu gfp_flags %lu node %d",
35                    type_id, call_site, (unsigned long) ptr,
36                    bytes_req, bytes_alloc, (unsigned long) gfp_flags, node);
37 }
38
39 static inline void kmemtrace_mark_free(enum kmemtrace_type_id type_id,
40                                        unsigned long call_site,
41                                        const void *ptr)
42 {
43         trace_mark(kmemtrace_free, "type_id %d call_site %lu ptr %lu",
44                    type_id, call_site, (unsigned long) ptr);
45 }
46
47 #else /* CONFIG_KMEMTRACE */
48
49 static inline void kmemtrace_init(void)
50 {
51 }
52
53 static inline void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id,
54                                              unsigned long call_site,
55                                              const void *ptr,
56                                              size_t bytes_req,
57                                              size_t bytes_alloc,
58                                              gfp_t gfp_flags,
59                                              int node)
60 {
61 }
62
63 static inline void kmemtrace_mark_free(enum kmemtrace_type_id type_id,
64                                        unsigned long call_site,
65                                        const void *ptr)
66 {
67 }
68
69 #endif /* CONFIG_KMEMTRACE */
70
71 static inline void kmemtrace_mark_alloc(enum kmemtrace_type_id type_id,
72                                         unsigned long call_site,
73                                         const void *ptr,
74                                         size_t bytes_req,
75                                         size_t bytes_alloc,
76                                         gfp_t gfp_flags)
77 {
78         kmemtrace_mark_alloc_node(type_id, call_site, ptr,
79                                   bytes_req, bytes_alloc, gfp_flags, -1);
80 }
81
82 #endif /* __KERNEL__ */
83
84 #endif /* _LINUX_KMEMTRACE_H */
85