diff options
Diffstat (limited to 'include/trace')
-rw-r--r-- | include/trace/events/gfpflags.h | 37 | ||||
-rw-r--r-- | include/trace/events/kmem.h | 38 | ||||
-rw-r--r-- | include/trace/events/vmscan.h | 115 |
3 files changed, 153 insertions, 37 deletions
diff --git a/include/trace/events/gfpflags.h b/include/trace/events/gfpflags.h new file mode 100644 index 000000000000..e3615c093741 --- /dev/null +++ b/include/trace/events/gfpflags.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * The order of these masks is important. Matching masks will be seen | ||
3 | * first and the left over flags will end up showing by themselves. | ||
4 | * | ||
5 | * For example, if we have GFP_KERNEL before GFP_USER we wil get: | ||
6 | * | ||
7 | * GFP_KERNEL|GFP_HARDWALL | ||
8 | * | ||
9 | * Thus most bits set go first. | ||
10 | */ | ||
11 | #define show_gfp_flags(flags) \ | ||
12 | (flags) ? __print_flags(flags, "|", \ | ||
13 | {(unsigned long)GFP_HIGHUSER_MOVABLE, "GFP_HIGHUSER_MOVABLE"}, \ | ||
14 | {(unsigned long)GFP_HIGHUSER, "GFP_HIGHUSER"}, \ | ||
15 | {(unsigned long)GFP_USER, "GFP_USER"}, \ | ||
16 | {(unsigned long)GFP_TEMPORARY, "GFP_TEMPORARY"}, \ | ||
17 | {(unsigned long)GFP_KERNEL, "GFP_KERNEL"}, \ | ||
18 | {(unsigned long)GFP_NOFS, "GFP_NOFS"}, \ | ||
19 | {(unsigned long)GFP_ATOMIC, "GFP_ATOMIC"}, \ | ||
20 | {(unsigned long)GFP_NOIO, "GFP_NOIO"}, \ | ||
21 | {(unsigned long)__GFP_HIGH, "GFP_HIGH"}, \ | ||
22 | {(unsigned long)__GFP_WAIT, "GFP_WAIT"}, \ | ||
23 | {(unsigned long)__GFP_IO, "GFP_IO"}, \ | ||
24 | {(unsigned long)__GFP_COLD, "GFP_COLD"}, \ | ||
25 | {(unsigned long)__GFP_NOWARN, "GFP_NOWARN"}, \ | ||
26 | {(unsigned long)__GFP_REPEAT, "GFP_REPEAT"}, \ | ||
27 | {(unsigned long)__GFP_NOFAIL, "GFP_NOFAIL"}, \ | ||
28 | {(unsigned long)__GFP_NORETRY, "GFP_NORETRY"}, \ | ||
29 | {(unsigned long)__GFP_COMP, "GFP_COMP"}, \ | ||
30 | {(unsigned long)__GFP_ZERO, "GFP_ZERO"}, \ | ||
31 | {(unsigned long)__GFP_NOMEMALLOC, "GFP_NOMEMALLOC"}, \ | ||
32 | {(unsigned long)__GFP_HARDWALL, "GFP_HARDWALL"}, \ | ||
33 | {(unsigned long)__GFP_THISNODE, "GFP_THISNODE"}, \ | ||
34 | {(unsigned long)__GFP_RECLAIMABLE, "GFP_RECLAIMABLE"}, \ | ||
35 | {(unsigned long)__GFP_MOVABLE, "GFP_MOVABLE"} \ | ||
36 | ) : "GFP_NOWAIT" | ||
37 | |||
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 3adca0ca9dbe..a9c87ad8331c 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h | |||
@@ -6,43 +6,7 @@ | |||
6 | 6 | ||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
9 | 9 | #include "gfpflags.h" | |
10 | /* | ||
11 | * The order of these masks is important. Matching masks will be seen | ||
12 | * first and the left over flags will end up showing by themselves. | ||
13 | * | ||
14 | * For example, if we have GFP_KERNEL before GFP_USER we wil get: | ||
15 | * | ||
16 | * GFP_KERNEL|GFP_HARDWALL | ||
17 | * | ||
18 | * Thus most bits set go first. | ||
19 | */ | ||
20 | #define show_gfp_flags(flags) \ | ||
21 | (flags) ? __print_flags(flags, "|", \ | ||
22 | {(unsigned long)GFP_HIGHUSER_MOVABLE, "GFP_HIGHUSER_MOVABLE"}, \ | ||
23 | {(unsigned long)GFP_HIGHUSER, "GFP_HIGHUSER"}, \ | ||
24 | {(unsigned long)GFP_USER, "GFP_USER"}, \ | ||
25 | {(unsigned long)GFP_TEMPORARY, "GFP_TEMPORARY"}, \ | ||
26 | {(unsigned long)GFP_KERNEL, "GFP_KERNEL"}, \ | ||
27 | {(unsigned long)GFP_NOFS, "GFP_NOFS"}, \ | ||
28 | {(unsigned long)GFP_ATOMIC, "GFP_ATOMIC"}, \ | ||
29 | {(unsigned long)GFP_NOIO, "GFP_NOIO"}, \ | ||
30 | {(unsigned long)__GFP_HIGH, "GFP_HIGH"}, \ | ||
31 | {(unsigned long)__GFP_WAIT, "GFP_WAIT"}, \ | ||
32 | {(unsigned long)__GFP_IO, "GFP_IO"}, \ | ||
33 | {(unsigned long)__GFP_COLD, "GFP_COLD"}, \ | ||
34 | {(unsigned long)__GFP_NOWARN, "GFP_NOWARN"}, \ | ||
35 | {(unsigned long)__GFP_REPEAT, "GFP_REPEAT"}, \ | ||
36 | {(unsigned long)__GFP_NOFAIL, "GFP_NOFAIL"}, \ | ||
37 | {(unsigned long)__GFP_NORETRY, "GFP_NORETRY"}, \ | ||
38 | {(unsigned long)__GFP_COMP, "GFP_COMP"}, \ | ||
39 | {(unsigned long)__GFP_ZERO, "GFP_ZERO"}, \ | ||
40 | {(unsigned long)__GFP_NOMEMALLOC, "GFP_NOMEMALLOC"}, \ | ||
41 | {(unsigned long)__GFP_HARDWALL, "GFP_HARDWALL"}, \ | ||
42 | {(unsigned long)__GFP_THISNODE, "GFP_THISNODE"}, \ | ||
43 | {(unsigned long)__GFP_RECLAIMABLE, "GFP_RECLAIMABLE"}, \ | ||
44 | {(unsigned long)__GFP_MOVABLE, "GFP_MOVABLE"} \ | ||
45 | ) : "GFP_NOWAIT" | ||
46 | 10 | ||
47 | DECLARE_EVENT_CLASS(kmem_alloc, | 11 | DECLARE_EVENT_CLASS(kmem_alloc, |
48 | 12 | ||
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h new file mode 100644 index 000000000000..f76521ffe7df --- /dev/null +++ b/include/trace/events/vmscan.h | |||
@@ -0,0 +1,115 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM vmscan | ||
3 | |||
4 | #if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_VMSCAN_H | ||
6 | |||
7 | #include <linux/types.h> | ||
8 | #include <linux/tracepoint.h> | ||
9 | #include "gfpflags.h" | ||
10 | |||
11 | TRACE_EVENT(mm_vmscan_kswapd_sleep, | ||
12 | |||
13 | TP_PROTO(int nid), | ||
14 | |||
15 | TP_ARGS(nid), | ||
16 | |||
17 | TP_STRUCT__entry( | ||
18 | __field( int, nid ) | ||
19 | ), | ||
20 | |||
21 | TP_fast_assign( | ||
22 | __entry->nid = nid; | ||
23 | ), | ||
24 | |||
25 | TP_printk("nid=%d", __entry->nid) | ||
26 | ); | ||
27 | |||
28 | TRACE_EVENT(mm_vmscan_kswapd_wake, | ||
29 | |||
30 | TP_PROTO(int nid, int order), | ||
31 | |||
32 | TP_ARGS(nid, order), | ||
33 | |||
34 | TP_STRUCT__entry( | ||
35 | __field( int, nid ) | ||
36 | __field( int, order ) | ||
37 | ), | ||
38 | |||
39 | TP_fast_assign( | ||
40 | __entry->nid = nid; | ||
41 | __entry->order = order; | ||
42 | ), | ||
43 | |||
44 | TP_printk("nid=%d order=%d", __entry->nid, __entry->order) | ||
45 | ); | ||
46 | |||
47 | TRACE_EVENT(mm_vmscan_wakeup_kswapd, | ||
48 | |||
49 | TP_PROTO(int nid, int zid, int order), | ||
50 | |||
51 | TP_ARGS(nid, zid, order), | ||
52 | |||
53 | TP_STRUCT__entry( | ||
54 | __field( int, nid ) | ||
55 | __field( int, zid ) | ||
56 | __field( int, order ) | ||
57 | ), | ||
58 | |||
59 | TP_fast_assign( | ||
60 | __entry->nid = nid; | ||
61 | __entry->zid = zid; | ||
62 | __entry->order = order; | ||
63 | ), | ||
64 | |||
65 | TP_printk("nid=%d zid=%d order=%d", | ||
66 | __entry->nid, | ||
67 | __entry->zid, | ||
68 | __entry->order) | ||
69 | ); | ||
70 | |||
71 | TRACE_EVENT(mm_vmscan_direct_reclaim_begin, | ||
72 | |||
73 | TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), | ||
74 | |||
75 | TP_ARGS(order, may_writepage, gfp_flags), | ||
76 | |||
77 | TP_STRUCT__entry( | ||
78 | __field( int, order ) | ||
79 | __field( int, may_writepage ) | ||
80 | __field( gfp_t, gfp_flags ) | ||
81 | ), | ||
82 | |||
83 | TP_fast_assign( | ||
84 | __entry->order = order; | ||
85 | __entry->may_writepage = may_writepage; | ||
86 | __entry->gfp_flags = gfp_flags; | ||
87 | ), | ||
88 | |||
89 | TP_printk("order=%d may_writepage=%d gfp_flags=%s", | ||
90 | __entry->order, | ||
91 | __entry->may_writepage, | ||
92 | show_gfp_flags(__entry->gfp_flags)) | ||
93 | ); | ||
94 | |||
95 | TRACE_EVENT(mm_vmscan_direct_reclaim_end, | ||
96 | |||
97 | TP_PROTO(unsigned long nr_reclaimed), | ||
98 | |||
99 | TP_ARGS(nr_reclaimed), | ||
100 | |||
101 | TP_STRUCT__entry( | ||
102 | __field( unsigned long, nr_reclaimed ) | ||
103 | ), | ||
104 | |||
105 | TP_fast_assign( | ||
106 | __entry->nr_reclaimed = nr_reclaimed; | ||
107 | ), | ||
108 | |||
109 | TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed) | ||
110 | ); | ||
111 | |||
112 | #endif /* _TRACE_VMSCAN_H */ | ||
113 | |||
114 | /* This part must be outside protection */ | ||
115 | #include <trace/define_trace.h> | ||