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_RHEL_KERNEL_RANGE(4,18,0,372,0,0, 4,19,0,0,0,0))
234 LTTNG_TRACEPOINT_EVENT_MAP(kfree
,
238 TP_PROTO(unsigned long call_site
, const void *ptr
),
240 TP_ARGS(call_site
, ptr
),
243 ctf_integer_hex(unsigned long, call_site
, call_site
)
244 ctf_integer_hex(const void *, ptr
, ptr
)
248 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free
,
250 TP_PROTO(unsigned long call_site
, const void *ptr
),
252 TP_ARGS(call_site
, ptr
),
255 ctf_integer_hex(unsigned long, call_site
, call_site
)
256 ctf_integer_hex(const void *, ptr
, ptr
)
260 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free
, kfree
,
264 TP_PROTO(unsigned long call_site
, const void *ptr
),
266 TP_ARGS(call_site
, ptr
)
269 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free
, kmem_cache_free
,
271 TP_PROTO(unsigned long call_site
, const void *ptr
),
273 TP_ARGS(call_site
, ptr
)
277 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
278 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
280 TP_PROTO(unsigned long call_site
, const void *ptr
, const struct kmem_cache
*s
),
282 TP_ARGS(call_site
, ptr
, s
),
285 ctf_integer_hex(unsigned long, call_site
, call_site
)
286 ctf_integer_hex(const void *, ptr
, ptr
)
287 ctf_string(name
, s
->name
)
290 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
291 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
293 TP_PROTO(unsigned long call_site
, const void *ptr
, const char *name
),
295 TP_ARGS(call_site
, ptr
, name
),
298 ctf_integer_hex(unsigned long, call_site
, call_site
)
299 ctf_integer_hex(const void *, ptr
, ptr
)
300 ctf_string(name
, name
)
305 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
306 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
308 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_direct
, kmem_mm_page_free_direct
,
311 TP_PROTO(struct page
*page
, unsigned int order
),
313 TP_ARGS(page
, order
),
316 ctf_integer_hex(struct page
*, page
, page
)
317 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
318 ctf_integer(unsigned int, order
, order
)
322 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
323 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
325 TP_PROTO(struct page
*page
),
330 ctf_integer_hex(struct page
*, page
, page
)
331 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
334 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
335 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
337 TP_PROTO(struct page
*page
, int cold
),
342 ctf_integer_hex(struct page
*, page
, page
)
343 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
344 ctf_integer(int, cold
, cold
)
348 LTTNG_TRACEPOINT_EVENT_MAP(mm_pagevec_free
, kmem_pagevec_free
,
350 TP_PROTO(struct page
*page
, int cold
),
355 ctf_integer_hex(struct page
*, page
, page
)
356 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
357 ctf_integer(int, cold
, cold
)
362 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
364 TP_PROTO(struct page
*page
, unsigned int order
,
365 gfp_t gfp_flags
, int migratetype
),
367 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
370 ctf_integer_hex(struct page
*, page
, page
)
371 ctf_integer(unsigned long, pfn
,
372 page
? page_to_pfn(page
) : -1UL)
373 ctf_integer(unsigned int, order
, order
)
374 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
375 ctf_integer(int, migratetype
, migratetype
)
379 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0))
380 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
382 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
385 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
388 ctf_integer_hex(struct page
*, page
, page
)
389 ctf_integer(unsigned long, pfn
,
390 page
? page_to_pfn(page
) : -1UL)
391 ctf_integer(unsigned int, order
, order
)
392 ctf_integer(int, migratetype
, migratetype
)
393 ctf_integer(int, percpu_refill
, percpu_refill
)
397 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
399 kmem_mm_page_alloc_zone_locked
,
401 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
404 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
407 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
409 kmem_mm_page_pcpu_drain
,
411 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
413 TP_ARGS(page
, order
, migratetype
),
416 ctf_integer(unsigned long, pfn
,
417 page
? page_to_pfn(page
) : -1UL)
418 ctf_integer(unsigned int, order
, order
)
419 ctf_integer(int, migratetype
, migratetype
)
423 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
425 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
427 TP_ARGS(page
, order
, migratetype
),
430 ctf_integer_hex(struct page
*, page
, page
)
431 ctf_integer(unsigned long, pfn
,
432 page
? page_to_pfn(page
) : -1UL)
433 ctf_integer(unsigned int, order
, order
)
434 ctf_integer(int, migratetype
, migratetype
)
438 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
440 kmem_mm_page_alloc_zone_locked
,
442 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
444 TP_ARGS(page
, order
, migratetype
)
447 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
449 kmem_mm_page_pcpu_drain
,
451 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
453 TP_ARGS(page
, order
, migratetype
)
457 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,2) \
458 || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \
459 || LTTNG_KERNEL_RANGE(3,16,35, 3,17,0) \
460 || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \
461 || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \
462 || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0) \
463 || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))
465 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
467 kmem_mm_page_alloc_extfrag
,
469 TP_PROTO(struct page
*page
,
470 int alloc_order
, int fallback_order
,
471 int alloc_migratetype
, int fallback_migratetype
),
474 alloc_order
, fallback_order
,
475 alloc_migratetype
, fallback_migratetype
),
478 ctf_integer_hex(struct page
*, page
, page
)
479 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
480 ctf_integer(int, alloc_order
, alloc_order
)
481 ctf_integer(int, fallback_order
, fallback_order
)
482 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
483 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
484 ctf_integer(int, change_ownership
,
485 (alloc_migratetype
== get_pageblock_migratetype(page
)))
489 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,30))
491 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
493 kmem_mm_page_alloc_extfrag
,
495 TP_PROTO(struct page
*page
,
496 int alloc_order
, int fallback_order
,
497 int alloc_migratetype
, int fallback_migratetype
, int new_migratetype
),
500 alloc_order
, fallback_order
,
501 alloc_migratetype
, fallback_migratetype
, new_migratetype
),
504 ctf_integer_hex(struct page
*, page
, page
)
505 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
506 ctf_integer(int, alloc_order
, alloc_order
)
507 ctf_integer(int, fallback_order
, fallback_order
)
508 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
509 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
510 ctf_integer(int, change_ownership
, (new_migratetype
== alloc_migratetype
))
514 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0))
516 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
518 kmem_mm_page_alloc_extfrag
,
520 TP_PROTO(struct page
*page
,
521 int alloc_order
, int fallback_order
,
522 int alloc_migratetype
, int fallback_migratetype
,
523 int change_ownership
),
526 alloc_order
, fallback_order
,
527 alloc_migratetype
, fallback_migratetype
,
531 ctf_integer_hex(struct page
*, page
, page
)
532 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
533 ctf_integer(int, alloc_order
, alloc_order
)
534 ctf_integer(int, fallback_order
, fallback_order
)
535 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
536 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
537 ctf_integer(int, change_ownership
, change_ownership
)
541 #else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
543 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
545 kmem_mm_page_alloc_extfrag
,
547 TP_PROTO(struct page
*page
,
548 int alloc_order
, int fallback_order
,
549 int alloc_migratetype
, int fallback_migratetype
),
552 alloc_order
, fallback_order
,
553 alloc_migratetype
, fallback_migratetype
),
556 ctf_integer_hex(struct page
*, page
, page
)
557 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
558 ctf_integer(int, alloc_order
, alloc_order
)
559 ctf_integer(int, fallback_order
, fallback_order
)
560 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
561 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
565 #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
567 #endif /* LTTNG_TRACE_KMEM_H */
569 /* This part must be outside protection */
570 #include <lttng/define_trace.h>