1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #define TRACE_SYSTEM kmem
5 #if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define LTTNG_TRACE_KMEM_H
8 #include <lttng/tracepoint-event.h>
9 #include <linux/types.h>
10 #include <lttng/kernel-version.h>
12 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
13 #include <../../mm/slab.h>
16 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
17 LTTNG_TRACEPOINT_EVENT_MAP(kmalloc
,
21 TP_PROTO(unsigned long call_site
,
28 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
31 ctf_integer_hex(unsigned long, call_site
, call_site
)
32 ctf_integer_hex(const void *, ptr
, ptr
)
33 ctf_integer(size_t, bytes_req
, bytes_req
)
34 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
35 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
36 ctf_integer(int, node
, node
)
37 ctf_integer(bool, accounted
, (IS_ENABLED(CONFIG_MEMCG_KMEM
) &&
38 (gfp_flags
& __GFP_ACCOUNT
) ? true : false))
42 LTTNG_TRACEPOINT_EVENT(kmem_cache_alloc
,
44 TP_PROTO(unsigned long call_site
,
50 TP_ARGS(call_site
, ptr
, s
, gfp_flags
, node
),
53 ctf_integer_hex(unsigned long, call_site
, call_site
)
54 ctf_integer_hex(const void *, ptr
, ptr
)
55 ctf_integer(size_t, bytes_req
, s
->object_size
)
56 ctf_integer(size_t, bytes_alloc
, s
->size
)
57 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
58 ctf_integer(int, node
, node
)
59 ctf_integer(bool, accounted
, IS_ENABLED(CONFIG_MEMCG_KMEM
) ?
60 ((gfp_flags
& __GFP_ACCOUNT
) ||
61 (s
->flags
& SLAB_ACCOUNT
)) : false)
64 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
65 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
67 TP_PROTO(unsigned long call_site
,
74 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
),
77 ctf_integer_hex(unsigned long, call_site
, call_site
)
78 ctf_integer_hex(const void *, ptr
, ptr
)
79 ctf_integer(size_t, bytes_req
, bytes_req
)
80 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
81 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
82 ctf_integer(bool, accounted
, IS_ENABLED(CONFIG_MEMCG_KMEM
) ?
83 ((gfp_flags
& __GFP_ACCOUNT
) ||
84 (s
&& s
->flags
& SLAB_ACCOUNT
)) : false)
88 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
92 TP_PROTO(unsigned long call_site
, const void *ptr
, struct kmem_cache
*s
,
93 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
95 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
98 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
100 TP_PROTO(unsigned long call_site
, const void *ptr
, struct kmem_cache
*s
,
101 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
103 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
106 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
108 TP_PROTO(unsigned long call_site
,
114 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
),
117 ctf_integer_hex(unsigned long, call_site
, call_site
)
118 ctf_integer_hex(const void *, ptr
, ptr
)
119 ctf_integer(size_t, bytes_req
, bytes_req
)
120 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
121 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
125 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
129 TP_PROTO(unsigned long call_site
, const void *ptr
,
130 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
132 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
135 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
137 TP_PROTO(unsigned long call_site
, const void *ptr
,
138 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
140 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
144 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
145 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
147 TP_PROTO(unsigned long call_site
,
149 struct kmem_cache
*s
,
155 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
158 ctf_integer_hex(unsigned long, call_site
, call_site
)
159 ctf_integer_hex(const void *, ptr
, ptr
)
160 ctf_integer(size_t, bytes_req
, bytes_req
)
161 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
162 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
163 ctf_integer(int, node
, node
)
164 ctf_integer(bool, accounted
, IS_ENABLED(CONFIG_MEMCG_KMEM
) ?
165 ((gfp_flags
& __GFP_ACCOUNT
) ||
166 (s
&& s
->flags
& SLAB_ACCOUNT
)) : false)
170 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
174 TP_PROTO(unsigned long call_site
, const void *ptr
,
175 struct kmem_cache
*s
, size_t bytes_req
, size_t bytes_alloc
,
176 gfp_t gfp_flags
, int node
),
178 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
181 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
183 TP_PROTO(unsigned long call_site
, const void *ptr
,
184 struct kmem_cache
*s
, size_t bytes_req
, size_t bytes_alloc
,
185 gfp_t gfp_flags
, int node
),
187 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
190 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
192 TP_PROTO(unsigned long call_site
,
199 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
202 ctf_integer_hex(unsigned long, call_site
, call_site
)
203 ctf_integer_hex(const void *, ptr
, ptr
)
204 ctf_integer(size_t, bytes_req
, bytes_req
)
205 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
206 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
207 ctf_integer(int, node
, node
)
211 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
215 TP_PROTO(unsigned long call_site
, const void *ptr
,
216 size_t bytes_req
, size_t bytes_alloc
,
217 gfp_t gfp_flags
, int node
),
219 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
222 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
224 TP_PROTO(unsigned long call_site
, const void *ptr
,
225 size_t bytes_req
, size_t bytes_alloc
,
226 gfp_t gfp_flags
, int node
),
228 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
232 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
233 LTTNG_TRACEPOINT_EVENT_MAP(kfree
,
237 TP_PROTO(unsigned long call_site
, const void *ptr
),
239 TP_ARGS(call_site
, ptr
),
242 ctf_integer_hex(unsigned long, call_site
, call_site
)
243 ctf_integer_hex(const void *, ptr
, ptr
)
247 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free
,
249 TP_PROTO(unsigned long call_site
, const void *ptr
),
251 TP_ARGS(call_site
, ptr
),
254 ctf_integer_hex(unsigned long, call_site
, call_site
)
255 ctf_integer_hex(const void *, ptr
, ptr
)
259 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free
, kfree
,
263 TP_PROTO(unsigned long call_site
, const void *ptr
),
265 TP_ARGS(call_site
, ptr
)
268 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free
, kmem_cache_free
,
270 TP_PROTO(unsigned long call_site
, const void *ptr
),
272 TP_ARGS(call_site
, ptr
)
276 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
277 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
279 TP_PROTO(unsigned long call_site
, const void *ptr
, const struct kmem_cache
*s
),
281 TP_ARGS(call_site
, ptr
, s
),
284 ctf_integer_hex(unsigned long, call_site
, call_site
)
285 ctf_integer_hex(const void *, ptr
, ptr
)
286 ctf_string(name
, s
->name
)
289 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
290 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
292 TP_PROTO(unsigned long call_site
, const void *ptr
, const char *name
),
294 TP_ARGS(call_site
, ptr
, name
),
297 ctf_integer_hex(unsigned long, call_site
, call_site
)
298 ctf_integer_hex(const void *, ptr
, ptr
)
299 ctf_string(name
, name
)
304 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
305 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
307 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_direct
, kmem_mm_page_free_direct
,
310 TP_PROTO(struct page
*page
, unsigned int order
),
312 TP_ARGS(page
, order
),
315 ctf_integer_hex(struct page
*, page
, page
)
316 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
317 ctf_integer(unsigned int, order
, order
)
321 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
322 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
324 TP_PROTO(struct page
*page
),
329 ctf_integer_hex(struct page
*, page
, page
)
330 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
333 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
334 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
336 TP_PROTO(struct page
*page
, int cold
),
341 ctf_integer_hex(struct page
*, page
, page
)
342 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
343 ctf_integer(int, cold
, cold
)
347 LTTNG_TRACEPOINT_EVENT_MAP(mm_pagevec_free
, kmem_pagevec_free
,
349 TP_PROTO(struct page
*page
, int cold
),
354 ctf_integer_hex(struct page
*, page
, page
)
355 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
356 ctf_integer(int, cold
, cold
)
361 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
363 TP_PROTO(struct page
*page
, unsigned int order
,
364 gfp_t gfp_flags
, int migratetype
),
366 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
369 ctf_integer_hex(struct page
*, page
, page
)
370 ctf_integer(unsigned long, pfn
,
371 page
? page_to_pfn(page
) : -1UL)
372 ctf_integer(unsigned int, order
, order
)
373 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
374 ctf_integer(int, migratetype
, migratetype
)
378 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0))
379 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
381 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
384 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
387 ctf_integer_hex(struct page
*, page
, page
)
388 ctf_integer(unsigned long, pfn
,
389 page
? page_to_pfn(page
) : -1UL)
390 ctf_integer(unsigned int, order
, order
)
391 ctf_integer(int, migratetype
, migratetype
)
392 ctf_integer(int, percpu_refill
, percpu_refill
)
396 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
398 kmem_mm_page_alloc_zone_locked
,
400 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
403 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
406 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
408 kmem_mm_page_pcpu_drain
,
410 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
412 TP_ARGS(page
, order
, migratetype
),
415 ctf_integer(unsigned long, pfn
,
416 page
? page_to_pfn(page
) : -1UL)
417 ctf_integer(unsigned int, order
, order
)
418 ctf_integer(int, migratetype
, migratetype
)
422 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
424 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
426 TP_ARGS(page
, order
, migratetype
),
429 ctf_integer_hex(struct page
*, page
, page
)
430 ctf_integer(unsigned long, pfn
,
431 page
? page_to_pfn(page
) : -1UL)
432 ctf_integer(unsigned int, order
, order
)
433 ctf_integer(int, migratetype
, migratetype
)
437 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
439 kmem_mm_page_alloc_zone_locked
,
441 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
443 TP_ARGS(page
, order
, migratetype
)
446 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
448 kmem_mm_page_pcpu_drain
,
450 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
452 TP_ARGS(page
, order
, migratetype
)
456 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,2) \
457 || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \
458 || LTTNG_KERNEL_RANGE(3,16,35, 3,17,0) \
459 || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \
460 || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \
461 || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0) \
462 || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))
464 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
466 kmem_mm_page_alloc_extfrag
,
468 TP_PROTO(struct page
*page
,
469 int alloc_order
, int fallback_order
,
470 int alloc_migratetype
, int fallback_migratetype
),
473 alloc_order
, fallback_order
,
474 alloc_migratetype
, fallback_migratetype
),
477 ctf_integer_hex(struct page
*, page
, page
)
478 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
479 ctf_integer(int, alloc_order
, alloc_order
)
480 ctf_integer(int, fallback_order
, fallback_order
)
481 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
482 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
483 ctf_integer(int, change_ownership
,
484 (alloc_migratetype
== get_pageblock_migratetype(page
)))
488 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,30))
490 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
492 kmem_mm_page_alloc_extfrag
,
494 TP_PROTO(struct page
*page
,
495 int alloc_order
, int fallback_order
,
496 int alloc_migratetype
, int fallback_migratetype
, int new_migratetype
),
499 alloc_order
, fallback_order
,
500 alloc_migratetype
, fallback_migratetype
, new_migratetype
),
503 ctf_integer_hex(struct page
*, page
, page
)
504 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
505 ctf_integer(int, alloc_order
, alloc_order
)
506 ctf_integer(int, fallback_order
, fallback_order
)
507 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
508 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
509 ctf_integer(int, change_ownership
, (new_migratetype
== alloc_migratetype
))
513 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0))
515 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
517 kmem_mm_page_alloc_extfrag
,
519 TP_PROTO(struct page
*page
,
520 int alloc_order
, int fallback_order
,
521 int alloc_migratetype
, int fallback_migratetype
,
522 int change_ownership
),
525 alloc_order
, fallback_order
,
526 alloc_migratetype
, fallback_migratetype
,
530 ctf_integer_hex(struct page
*, page
, page
)
531 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
532 ctf_integer(int, alloc_order
, alloc_order
)
533 ctf_integer(int, fallback_order
, fallback_order
)
534 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
535 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
536 ctf_integer(int, change_ownership
, change_ownership
)
540 #else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
542 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
544 kmem_mm_page_alloc_extfrag
,
546 TP_PROTO(struct page
*page
,
547 int alloc_order
, int fallback_order
,
548 int alloc_migratetype
, int fallback_migratetype
),
551 alloc_order
, fallback_order
,
552 alloc_migratetype
, fallback_migratetype
),
555 ctf_integer_hex(struct page
*, page
, page
)
556 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
557 ctf_integer(int, alloc_order
, alloc_order
)
558 ctf_integer(int, fallback_order
, fallback_order
)
559 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
560 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
564 #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
566 #endif /* LTTNG_TRACE_KMEM_H */
568 /* This part must be outside protection */
569 #include <lttng/define_trace.h>