1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM page_ref |
4 | |
5 | #if !defined(_TRACE_PAGE_REF_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_PAGE_REF_H |
7 | |
8 | #include <linux/types.h> |
9 | #include <linux/page_ref.h> |
10 | #include <linux/tracepoint.h> |
11 | #include <trace/events/mmflags.h> |
12 | |
13 | DECLARE_EVENT_CLASS(page_ref_mod_template, |
14 | |
15 | TP_PROTO(struct page *page, int v), |
16 | |
17 | TP_ARGS(page, v), |
18 | |
19 | TP_STRUCT__entry( |
20 | __field(unsigned long, pfn) |
21 | __field(unsigned long, flags) |
22 | __field(int, count) |
23 | __field(int, mapcount) |
24 | __field(void *, mapping) |
25 | __field(int, mt) |
26 | __field(int, val) |
27 | ), |
28 | |
29 | TP_fast_assign( |
30 | __entry->pfn = page_to_pfn(page); |
31 | __entry->flags = page->flags; |
32 | __entry->count = page_ref_count(page); |
33 | __entry->mapcount = page_mapcount(page); |
34 | __entry->mapping = page->mapping; |
35 | __entry->mt = get_pageblock_migratetype(page); |
36 | __entry->val = v; |
37 | ), |
38 | |
39 | TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d" , |
40 | __entry->pfn, |
41 | show_page_flags(__entry->flags & PAGEFLAGS_MASK), |
42 | __entry->count, |
43 | __entry->mapcount, __entry->mapping, __entry->mt, |
44 | __entry->val) |
45 | ); |
46 | |
47 | DEFINE_EVENT(page_ref_mod_template, page_ref_set, |
48 | |
49 | TP_PROTO(struct page *page, int v), |
50 | |
51 | TP_ARGS(page, v) |
52 | ); |
53 | |
54 | DEFINE_EVENT(page_ref_mod_template, page_ref_mod, |
55 | |
56 | TP_PROTO(struct page *page, int v), |
57 | |
58 | TP_ARGS(page, v) |
59 | ); |
60 | |
61 | DECLARE_EVENT_CLASS(page_ref_mod_and_test_template, |
62 | |
63 | TP_PROTO(struct page *page, int v, int ret), |
64 | |
65 | TP_ARGS(page, v, ret), |
66 | |
67 | TP_STRUCT__entry( |
68 | __field(unsigned long, pfn) |
69 | __field(unsigned long, flags) |
70 | __field(int, count) |
71 | __field(int, mapcount) |
72 | __field(void *, mapping) |
73 | __field(int, mt) |
74 | __field(int, val) |
75 | __field(int, ret) |
76 | ), |
77 | |
78 | TP_fast_assign( |
79 | __entry->pfn = page_to_pfn(page); |
80 | __entry->flags = page->flags; |
81 | __entry->count = page_ref_count(page); |
82 | __entry->mapcount = page_mapcount(page); |
83 | __entry->mapping = page->mapping; |
84 | __entry->mt = get_pageblock_migratetype(page); |
85 | __entry->val = v; |
86 | __entry->ret = ret; |
87 | ), |
88 | |
89 | TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d" , |
90 | __entry->pfn, |
91 | show_page_flags(__entry->flags & PAGEFLAGS_MASK), |
92 | __entry->count, |
93 | __entry->mapcount, __entry->mapping, __entry->mt, |
94 | __entry->val, __entry->ret) |
95 | ); |
96 | |
97 | DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_test, |
98 | |
99 | TP_PROTO(struct page *page, int v, int ret), |
100 | |
101 | TP_ARGS(page, v, ret) |
102 | ); |
103 | |
104 | DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_and_return, |
105 | |
106 | TP_PROTO(struct page *page, int v, int ret), |
107 | |
108 | TP_ARGS(page, v, ret) |
109 | ); |
110 | |
111 | DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_mod_unless, |
112 | |
113 | TP_PROTO(struct page *page, int v, int ret), |
114 | |
115 | TP_ARGS(page, v, ret) |
116 | ); |
117 | |
118 | DEFINE_EVENT(page_ref_mod_and_test_template, page_ref_freeze, |
119 | |
120 | TP_PROTO(struct page *page, int v, int ret), |
121 | |
122 | TP_ARGS(page, v, ret) |
123 | ); |
124 | |
125 | DEFINE_EVENT(page_ref_mod_template, page_ref_unfreeze, |
126 | |
127 | TP_PROTO(struct page *page, int v), |
128 | |
129 | TP_ARGS(page, v) |
130 | ); |
131 | |
132 | #endif /* _TRACE_PAGE_COUNT_H */ |
133 | |
134 | /* This part must be outside protection */ |
135 | #include <trace/define_trace.h> |
136 | |