• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM oom
4 
5 #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_OOM_H
7 #include <linux/tracepoint.h>
8 #include <trace/events/mmflags.h>
9 
10 TRACE_EVENT(oom_score_adj_update,
11 
12 	TP_PROTO(struct task_struct *task),
13 
14 	TP_ARGS(task),
15 
16 	TP_STRUCT__entry(
17 		__field(	pid_t,	pid)
18 		__array(	char,	comm,	TASK_COMM_LEN )
19 		__field(	short,	oom_score_adj)
20 	),
21 
22 	TP_fast_assign(
23 		__entry->pid = task->pid;
24 		memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
25 		__entry->oom_score_adj = task->signal->oom_score_adj;
26 	),
27 
28 	TP_printk("pid=%d comm=%s oom_score_adj=%hd",
29 		__entry->pid, __entry->comm, __entry->oom_score_adj)
30 );
31 
32 TRACE_EVENT(reclaim_retry_zone,
33 
34 	TP_PROTO(struct zoneref *zoneref,
35 		int order,
36 		unsigned long reclaimable,
37 		unsigned long available,
38 		unsigned long min_wmark,
39 		int no_progress_loops,
40 		bool wmark_check),
41 
42 	TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check),
43 
44 	TP_STRUCT__entry(
45 		__field(	int, node)
46 		__field(	int, zone_idx)
47 		__field(	int,	order)
48 		__field(	unsigned long,	reclaimable)
49 		__field(	unsigned long,	available)
50 		__field(	unsigned long,	min_wmark)
51 		__field(	int,	no_progress_loops)
52 		__field(	bool,	wmark_check)
53 	),
54 
55 	TP_fast_assign(
56 		__entry->node = zone_to_nid(zoneref->zone);
57 		__entry->zone_idx = zoneref->zone_idx;
58 		__entry->order = order;
59 		__entry->reclaimable = reclaimable;
60 		__entry->available = available;
61 		__entry->min_wmark = min_wmark;
62 		__entry->no_progress_loops = no_progress_loops;
63 		__entry->wmark_check = wmark_check;
64 	),
65 
66 	TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d",
67 			__entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE),
68 			__entry->order,
69 			__entry->reclaimable, __entry->available, __entry->min_wmark,
70 			__entry->no_progress_loops,
71 			__entry->wmark_check)
72 );
73 
74 TRACE_EVENT(mark_victim,
75 	TP_PROTO(struct task_struct *task, uid_t uid),
76 
77 	TP_ARGS(task, uid),
78 
79 	TP_STRUCT__entry(
80 		__field(int, pid)
81 		__field(uid_t, uid)
82 		__string(comm, task->comm)
83 		__field(short, oom_score_adj)
84 	),
85 
86 	TP_fast_assign(
87 		__entry->pid = task->pid;
88 		__entry->uid = uid;
89 		__assign_str(comm, task->comm);
90 		__entry->oom_score_adj = task->signal->oom_score_adj;
91 	),
92 
93 	TP_printk("pid=%d uid=%u comm=%s oom_score_adj=%hd",
94 		__entry->pid,
95 		__entry->uid,
96 		__get_str(comm),
97 		__entry->oom_score_adj
98 	)
99 );
100 
101 TRACE_EVENT(wake_reaper,
102 	TP_PROTO(int pid),
103 
104 	TP_ARGS(pid),
105 
106 	TP_STRUCT__entry(
107 		__field(int, pid)
108 	),
109 
110 	TP_fast_assign(
111 		__entry->pid = pid;
112 	),
113 
114 	TP_printk("pid=%d", __entry->pid)
115 );
116 
117 TRACE_EVENT(start_task_reaping,
118 	TP_PROTO(int pid),
119 
120 	TP_ARGS(pid),
121 
122 	TP_STRUCT__entry(
123 		__field(int, pid)
124 	),
125 
126 	TP_fast_assign(
127 		__entry->pid = pid;
128 	),
129 
130 	TP_printk("pid=%d", __entry->pid)
131 );
132 
133 TRACE_EVENT(finish_task_reaping,
134 	TP_PROTO(int pid),
135 
136 	TP_ARGS(pid),
137 
138 	TP_STRUCT__entry(
139 		__field(int, pid)
140 	),
141 
142 	TP_fast_assign(
143 		__entry->pid = pid;
144 	),
145 
146 	TP_printk("pid=%d", __entry->pid)
147 );
148 
149 TRACE_EVENT(skip_task_reaping,
150 	TP_PROTO(int pid),
151 
152 	TP_ARGS(pid),
153 
154 	TP_STRUCT__entry(
155 		__field(int, pid)
156 	),
157 
158 	TP_fast_assign(
159 		__entry->pid = pid;
160 	),
161 
162 	TP_printk("pid=%d", __entry->pid)
163 );
164 
165 #ifdef CONFIG_COMPACTION
166 TRACE_EVENT(compact_retry,
167 
168 	TP_PROTO(int order,
169 		enum compact_priority priority,
170 		enum compact_result result,
171 		int retries,
172 		int max_retries,
173 		bool ret),
174 
175 	TP_ARGS(order, priority, result, retries, max_retries, ret),
176 
177 	TP_STRUCT__entry(
178 		__field(	int, order)
179 		__field(	int, priority)
180 		__field(	int, result)
181 		__field(	int, retries)
182 		__field(	int, max_retries)
183 		__field(	bool, ret)
184 	),
185 
186 	TP_fast_assign(
187 		__entry->order = order;
188 		__entry->priority = priority;
189 		__entry->result = compact_result_to_feedback(result);
190 		__entry->retries = retries;
191 		__entry->max_retries = max_retries;
192 		__entry->ret = ret;
193 	),
194 
195 	TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d",
196 			__entry->order,
197 			__print_symbolic(__entry->priority, COMPACTION_PRIORITY),
198 			__print_symbolic(__entry->result, COMPACTION_FEEDBACK),
199 			__entry->retries, __entry->max_retries,
200 			__entry->ret)
201 );
202 #endif /* CONFIG_COMPACTION */
203 #endif
204 
205 /* This part must be outside protection */
206 #include <trace/define_trace.h>
207