3c616cb2252cffce30178ea223d2600d92d33f75
[lttng-modules.git] / include / instrumentation / events / kmem.h
1 // SPDX-FileCopyrightText: 2012 Paul Woegerer <paul_woegerer@mentor.com>
2 //
3 // SPDX-License-Identifier: GPL-2.0-only
4
5 #undef TRACE_SYSTEM
6 #define TRACE_SYSTEM kmem
7
8 #if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
9 #define LTTNG_TRACE_KMEM_H
10
11 #include <lttng/tracepoint-event.h>
12 #include <linux/types.h>
13 #include <lttng/kernel-version.h>
14
15 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
16 #include <../../mm/slab.h>
17 #endif
18
19 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
20 LTTNG_TRACEPOINT_EVENT_MAP(kmalloc,
21
22 kmem_kmalloc,
23
24 TP_PROTO(unsigned long call_site,
25 const void *ptr,
26 size_t bytes_req,
27 size_t bytes_alloc,
28 gfp_t gfp_flags,
29 int node),
30
31 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
32
33 TP_FIELDS(
34 ctf_integer_hex(unsigned long, call_site, call_site)
35 ctf_integer_hex(const void *, ptr, ptr)
36 ctf_integer(size_t, bytes_req, bytes_req)
37 ctf_integer(size_t, bytes_alloc, bytes_alloc)
38 ctf_integer(gfp_t, gfp_flags, gfp_flags)
39 ctf_integer(int, node, node)
40 ctf_integer(bool, accounted, (IS_ENABLED(CONFIG_MEMCG_KMEM) &&
41 (gfp_flags & __GFP_ACCOUNT) ? true : false))
42 )
43 )
44
45 LTTNG_TRACEPOINT_EVENT(kmem_cache_alloc,
46
47 TP_PROTO(unsigned long call_site,
48 const void *ptr,
49 struct kmem_cache *s,
50 gfp_t gfp_flags,
51 int node),
52
53 TP_ARGS(call_site, ptr, s, gfp_flags, node),
54
55 TP_FIELDS(
56 ctf_integer_hex(unsigned long, call_site, call_site)
57 ctf_integer_hex(const void *, ptr, ptr)
58 ctf_integer(size_t, bytes_req, s->object_size)
59 ctf_integer(size_t, bytes_alloc, s->size)
60 ctf_integer(gfp_t, gfp_flags, gfp_flags)
61 ctf_integer(int, node, node)
62 ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
63 ((gfp_flags & __GFP_ACCOUNT) ||
64 (s->flags & SLAB_ACCOUNT)) : false)
65 )
66 )
67 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0) || \
68 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
69
70 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
71
72 TP_PROTO(unsigned long call_site,
73 const void *ptr,
74 struct kmem_cache *s,
75 size_t bytes_req,
76 size_t bytes_alloc,
77 gfp_t gfp_flags),
78
79 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags),
80
81 TP_FIELDS(
82 ctf_integer_hex(unsigned long, call_site, call_site)
83 ctf_integer_hex(const void *, ptr, ptr)
84 ctf_integer(size_t, bytes_req, bytes_req)
85 ctf_integer(size_t, bytes_alloc, bytes_alloc)
86 ctf_integer(gfp_t, gfp_flags, gfp_flags)
87 ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
88 ((gfp_flags & __GFP_ACCOUNT) ||
89 (s && s->flags & SLAB_ACCOUNT)) : false)
90 )
91 )
92
93 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
94
95 kmem_kmalloc,
96
97 TP_PROTO(unsigned long call_site, const void *ptr, struct kmem_cache *s,
98 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
99
100 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags)
101 )
102
103 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
104
105 TP_PROTO(unsigned long call_site, const void *ptr, struct kmem_cache *s,
106 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
107
108 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags)
109 )
110 #else
111 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
112
113 TP_PROTO(unsigned long call_site,
114 const void *ptr,
115 size_t bytes_req,
116 size_t bytes_alloc,
117 gfp_t gfp_flags),
118
119 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
120
121 TP_FIELDS(
122 ctf_integer_hex(unsigned long, call_site, call_site)
123 ctf_integer_hex(const void *, ptr, ptr)
124 ctf_integer(size_t, bytes_req, bytes_req)
125 ctf_integer(size_t, bytes_alloc, bytes_alloc)
126 ctf_integer(gfp_t, gfp_flags, gfp_flags)
127 )
128 )
129
130 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
131
132 kmem_kmalloc,
133
134 TP_PROTO(unsigned long call_site, const void *ptr,
135 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
136
137 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
138 )
139
140 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
141
142 TP_PROTO(unsigned long call_site, const void *ptr,
143 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
144
145 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
146 )
147 #endif
148
149 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0) || \
150 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
151
152 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
153
154 TP_PROTO(unsigned long call_site,
155 const void *ptr,
156 struct kmem_cache *s,
157 size_t bytes_req,
158 size_t bytes_alloc,
159 gfp_t gfp_flags,
160 int node),
161
162 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node),
163
164 TP_FIELDS(
165 ctf_integer_hex(unsigned long, call_site, call_site)
166 ctf_integer_hex(const void *, ptr, ptr)
167 ctf_integer(size_t, bytes_req, bytes_req)
168 ctf_integer(size_t, bytes_alloc, bytes_alloc)
169 ctf_integer(gfp_t, gfp_flags, gfp_flags)
170 ctf_integer(int, node, node)
171 ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
172 ((gfp_flags & __GFP_ACCOUNT) ||
173 (s && s->flags & SLAB_ACCOUNT)) : false)
174 )
175 )
176
177 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
178
179 kmem_kmalloc_node,
180
181 TP_PROTO(unsigned long call_site, const void *ptr,
182 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
183 gfp_t gfp_flags, int node),
184
185 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
186 )
187
188 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
189
190 TP_PROTO(unsigned long call_site, const void *ptr,
191 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
192 gfp_t gfp_flags, int node),
193
194 TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
195 )
196 #else
197 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
198
199 TP_PROTO(unsigned long call_site,
200 const void *ptr,
201 size_t bytes_req,
202 size_t bytes_alloc,
203 gfp_t gfp_flags,
204 int node),
205
206 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
207
208 TP_FIELDS(
209 ctf_integer_hex(unsigned long, call_site, call_site)
210 ctf_integer_hex(const void *, ptr, ptr)
211 ctf_integer(size_t, bytes_req, bytes_req)
212 ctf_integer(size_t, bytes_alloc, bytes_alloc)
213 ctf_integer(gfp_t, gfp_flags, gfp_flags)
214 ctf_integer(int, node, node)
215 )
216 )
217
218 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
219
220 kmem_kmalloc_node,
221
222 TP_PROTO(unsigned long call_site, const void *ptr,
223 size_t bytes_req, size_t bytes_alloc,
224 gfp_t gfp_flags, int node),
225
226 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
227 )
228
229 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
230
231 TP_PROTO(unsigned long call_site, const void *ptr,
232 size_t bytes_req, size_t bytes_alloc,
233 gfp_t gfp_flags, int node),
234
235 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
236 )
237 #endif
238
239 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0) || \
240 LTTNG_RHEL_KERNEL_RANGE(4,18,0,348,0,0, 4,19,0,0,0,0))
241 LTTNG_TRACEPOINT_EVENT_MAP(kfree,
242
243 kmem_kfree,
244
245 TP_PROTO(unsigned long call_site, const void *ptr),
246
247 TP_ARGS(call_site, ptr),
248
249 TP_FIELDS(
250 ctf_integer_hex(unsigned long, call_site, call_site)
251 ctf_integer_hex(const void *, ptr, ptr)
252 )
253 )
254 #else
255 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free,
256
257 TP_PROTO(unsigned long call_site, const void *ptr),
258
259 TP_ARGS(call_site, ptr),
260
261 TP_FIELDS(
262 ctf_integer_hex(unsigned long, call_site, call_site)
263 ctf_integer_hex(const void *, ptr, ptr)
264 )
265 )
266
267 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free, kfree,
268
269 kmem_kfree,
270
271 TP_PROTO(unsigned long call_site, const void *ptr),
272
273 TP_ARGS(call_site, ptr)
274 )
275
276 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free, kmem_cache_free,
277
278 TP_PROTO(unsigned long call_site, const void *ptr),
279
280 TP_ARGS(call_site, ptr)
281 )
282 #endif
283
284 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
285 LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
286
287 TP_PROTO(unsigned long call_site, const void *ptr, const struct kmem_cache *s),
288
289 TP_ARGS(call_site, ptr, s),
290
291 TP_FIELDS(
292 ctf_integer_hex(unsigned long, call_site, call_site)
293 ctf_integer_hex(const void *, ptr, ptr)
294 ctf_string(name, s->name)
295 )
296 )
297 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
298 LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
299
300 TP_PROTO(unsigned long call_site, const void *ptr, const char *name),
301
302 TP_ARGS(call_site, ptr, name),
303
304 TP_FIELDS(
305 ctf_integer_hex(unsigned long, call_site, call_site)
306 ctf_integer_hex(const void *, ptr, ptr)
307 ctf_string(name, name)
308 )
309 )
310 #endif
311
312 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free, kmem_mm_page_free,
313
314 TP_PROTO(struct page *page, unsigned int order),
315
316 TP_ARGS(page, order),
317
318 TP_FIELDS(
319 ctf_integer_hex(struct page *, page, page)
320 ctf_integer(unsigned long, pfn, page_to_pfn(page))
321 ctf_integer(unsigned int, order, order)
322 )
323 )
324
325 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
326 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched,
327
328 TP_PROTO(struct page *page),
329
330 TP_ARGS(page),
331
332 TP_FIELDS(
333 ctf_integer_hex(struct page *, page, page)
334 ctf_integer(unsigned long, pfn, page_to_pfn(page))
335 )
336 )
337 #else
338 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched, kmem_mm_page_free_batched,
339
340 TP_PROTO(struct page *page, int cold),
341
342 TP_ARGS(page, cold),
343
344 TP_FIELDS(
345 ctf_integer_hex(struct page *, page, page)
346 ctf_integer(unsigned long, pfn, page_to_pfn(page))
347 ctf_integer(int, cold, cold)
348 )
349 )
350 #endif
351
352 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc, kmem_mm_page_alloc,
353
354 TP_PROTO(struct page *page, unsigned int order,
355 gfp_t gfp_flags, int migratetype),
356
357 TP_ARGS(page, order, gfp_flags, migratetype),
358
359 TP_FIELDS(
360 ctf_integer_hex(struct page *, page, page)
361 ctf_integer(unsigned long, pfn,
362 page ? page_to_pfn(page) : -1UL)
363 ctf_integer(unsigned int, order, order)
364 ctf_integer(gfp_t, gfp_flags, gfp_flags)
365 ctf_integer(int, migratetype, migratetype)
366 )
367 )
368
369 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0) || \
370 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
371
372 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page,
373
374 TP_PROTO(struct page *page, unsigned int order, int migratetype,
375 int percpu_refill),
376
377 TP_ARGS(page, order, migratetype, percpu_refill),
378
379 TP_FIELDS(
380 ctf_integer_hex(struct page *, page, page)
381 ctf_integer(unsigned long, pfn,
382 page ? page_to_pfn(page) : -1UL)
383 ctf_integer(unsigned int, order, order)
384 ctf_integer(int, migratetype, migratetype)
385 ctf_integer(int, percpu_refill, percpu_refill)
386 )
387 )
388
389 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_alloc_zone_locked,
390
391 kmem_mm_page_alloc_zone_locked,
392
393 TP_PROTO(struct page *page, unsigned int order, int migratetype,
394 int percpu_refill),
395
396 TP_ARGS(page, order, migratetype, percpu_refill)
397 )
398
399 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain,
400
401 kmem_mm_page_pcpu_drain,
402
403 TP_PROTO(struct page *page, unsigned int order, int migratetype),
404
405 TP_ARGS(page, order, migratetype),
406
407 TP_FIELDS(
408 ctf_integer(unsigned long, pfn,
409 page ? page_to_pfn(page) : -1UL)
410 ctf_integer(unsigned int, order, order)
411 ctf_integer(int, migratetype, migratetype)
412 )
413 )
414 #else
415 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page,
416
417 TP_PROTO(struct page *page, unsigned int order, int migratetype),
418
419 TP_ARGS(page, order, migratetype),
420
421 TP_FIELDS(
422 ctf_integer_hex(struct page *, page, page)
423 ctf_integer(unsigned long, pfn,
424 page ? page_to_pfn(page) : -1UL)
425 ctf_integer(unsigned int, order, order)
426 ctf_integer(int, migratetype, migratetype)
427 )
428 )
429
430 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_alloc_zone_locked,
431
432 kmem_mm_page_alloc_zone_locked,
433
434 TP_PROTO(struct page *page, unsigned int order, int migratetype),
435
436 TP_ARGS(page, order, migratetype)
437 )
438
439 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page, mm_page_pcpu_drain,
440
441 kmem_mm_page_pcpu_drain,
442
443 TP_PROTO(struct page *page, unsigned int order, int migratetype),
444
445 TP_ARGS(page, order, migratetype)
446 )
447 #endif
448
449 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag,
450
451 kmem_mm_page_alloc_extfrag,
452
453 TP_PROTO(struct page *page,
454 int alloc_order, int fallback_order,
455 int alloc_migratetype, int fallback_migratetype),
456
457 TP_ARGS(page,
458 alloc_order, fallback_order,
459 alloc_migratetype, fallback_migratetype),
460
461 TP_FIELDS(
462 ctf_integer_hex(struct page *, page, page)
463 ctf_integer(unsigned long, pfn, page_to_pfn(page))
464 ctf_integer(int, alloc_order, alloc_order)
465 ctf_integer(int, fallback_order, fallback_order)
466 ctf_integer(int, alloc_migratetype, alloc_migratetype)
467 ctf_integer(int, fallback_migratetype, fallback_migratetype)
468 ctf_integer(int, change_ownership,
469 (alloc_migratetype == get_pageblock_migratetype(page)))
470 )
471 )
472
473 #endif /* LTTNG_TRACE_KMEM_H */
474
475 /* This part must be outside protection */
476 #include <lttng/define_trace.h>
This page took 0.039157 seconds and 5 git commands to generate.