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_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
67 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
69 TP_PROTO(unsigned long call_site
,
76 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
),
79 ctf_integer_hex(unsigned long, call_site
, call_site
)
80 ctf_integer_hex(const void *, ptr
, ptr
)
81 ctf_integer(size_t, bytes_req
, bytes_req
)
82 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
83 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
84 ctf_integer(bool, accounted
, IS_ENABLED(CONFIG_MEMCG_KMEM
) ?
85 ((gfp_flags
& __GFP_ACCOUNT
) ||
86 (s
&& s
->flags
& SLAB_ACCOUNT
)) : false)
90 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
94 TP_PROTO(unsigned long call_site
, const void *ptr
, struct kmem_cache
*s
,
95 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
97 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
100 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
102 TP_PROTO(unsigned long call_site
, const void *ptr
, struct kmem_cache
*s
,
103 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
105 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
108 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
110 TP_PROTO(unsigned long call_site
,
116 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
),
119 ctf_integer_hex(unsigned long, call_site
, call_site
)
120 ctf_integer_hex(const void *, ptr
, ptr
)
121 ctf_integer(size_t, bytes_req
, bytes_req
)
122 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
123 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
127 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
131 TP_PROTO(unsigned long call_site
, const void *ptr
,
132 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
134 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
137 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
139 TP_PROTO(unsigned long call_site
, const void *ptr
,
140 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
142 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
146 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0) || \
147 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
149 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
151 TP_PROTO(unsigned long call_site
,
153 struct kmem_cache
*s
,
159 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
162 ctf_integer_hex(unsigned long, call_site
, call_site
)
163 ctf_integer_hex(const void *, ptr
, ptr
)
164 ctf_integer(size_t, bytes_req
, bytes_req
)
165 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
166 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
167 ctf_integer(int, node
, node
)
168 ctf_integer(bool, accounted
, IS_ENABLED(CONFIG_MEMCG_KMEM
) ?
169 ((gfp_flags
& __GFP_ACCOUNT
) ||
170 (s
&& s
->flags
& SLAB_ACCOUNT
)) : false)
174 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
178 TP_PROTO(unsigned long call_site
, const void *ptr
,
179 struct kmem_cache
*s
, size_t bytes_req
, size_t bytes_alloc
,
180 gfp_t gfp_flags
, int node
),
182 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
185 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
187 TP_PROTO(unsigned long call_site
, const void *ptr
,
188 struct kmem_cache
*s
, size_t bytes_req
, size_t bytes_alloc
,
189 gfp_t gfp_flags
, int node
),
191 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
194 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
196 TP_PROTO(unsigned long call_site
,
203 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
206 ctf_integer_hex(unsigned long, call_site
, call_site
)
207 ctf_integer_hex(const void *, ptr
, ptr
)
208 ctf_integer(size_t, bytes_req
, bytes_req
)
209 ctf_integer(size_t, bytes_alloc
, bytes_alloc
)
210 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
211 ctf_integer(int, node
, node
)
215 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
219 TP_PROTO(unsigned long call_site
, const void *ptr
,
220 size_t bytes_req
, size_t bytes_alloc
,
221 gfp_t gfp_flags
, int node
),
223 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
226 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
228 TP_PROTO(unsigned long call_site
, const void *ptr
,
229 size_t bytes_req
, size_t bytes_alloc
,
230 gfp_t gfp_flags
, int node
),
232 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
236 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0) || \
237 LTTNG_RHEL_KERNEL_RANGE(4,18,0,372,0,0, 4,19,0,0,0,0))
238 LTTNG_TRACEPOINT_EVENT_MAP(kfree
,
242 TP_PROTO(unsigned long call_site
, const void *ptr
),
244 TP_ARGS(call_site
, ptr
),
247 ctf_integer_hex(unsigned long, call_site
, call_site
)
248 ctf_integer_hex(const void *, ptr
, ptr
)
252 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free
,
254 TP_PROTO(unsigned long call_site
, const void *ptr
),
256 TP_ARGS(call_site
, ptr
),
259 ctf_integer_hex(unsigned long, call_site
, call_site
)
260 ctf_integer_hex(const void *, ptr
, ptr
)
264 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free
, kfree
,
268 TP_PROTO(unsigned long call_site
, const void *ptr
),
270 TP_ARGS(call_site
, ptr
)
273 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free
, kmem_cache_free
,
275 TP_PROTO(unsigned long call_site
, const void *ptr
),
277 TP_ARGS(call_site
, ptr
)
281 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
282 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
284 TP_PROTO(unsigned long call_site
, const void *ptr
, const struct kmem_cache
*s
),
286 TP_ARGS(call_site
, ptr
, s
),
289 ctf_integer_hex(unsigned long, call_site
, call_site
)
290 ctf_integer_hex(const void *, ptr
, ptr
)
291 ctf_string(name
, s
->name
)
294 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
295 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
297 TP_PROTO(unsigned long call_site
, const void *ptr
, const char *name
),
299 TP_ARGS(call_site
, ptr
, name
),
302 ctf_integer_hex(unsigned long, call_site
, call_site
)
303 ctf_integer_hex(const void *, ptr
, ptr
)
304 ctf_string(name
, name
)
309 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
310 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
312 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_direct
, kmem_mm_page_free_direct
,
315 TP_PROTO(struct page
*page
, unsigned int order
),
317 TP_ARGS(page
, order
),
320 ctf_integer_hex(struct page
*, page
, page
)
321 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
322 ctf_integer(unsigned int, order
, order
)
326 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
327 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
329 TP_PROTO(struct page
*page
),
334 ctf_integer_hex(struct page
*, page
, page
)
335 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
338 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
339 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
341 TP_PROTO(struct page
*page
, int cold
),
346 ctf_integer_hex(struct page
*, page
, page
)
347 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
348 ctf_integer(int, cold
, cold
)
352 LTTNG_TRACEPOINT_EVENT_MAP(mm_pagevec_free
, kmem_pagevec_free
,
354 TP_PROTO(struct page
*page
, int cold
),
359 ctf_integer_hex(struct page
*, page
, page
)
360 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
361 ctf_integer(int, cold
, cold
)
366 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
368 TP_PROTO(struct page
*page
, unsigned int order
,
369 gfp_t gfp_flags
, int migratetype
),
371 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
374 ctf_integer_hex(struct page
*, page
, page
)
375 ctf_integer(unsigned long, pfn
,
376 page
? page_to_pfn(page
) : -1UL)
377 ctf_integer(unsigned int, order
, order
)
378 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
379 ctf_integer(int, migratetype
, migratetype
)
383 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0) || \
384 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
386 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
388 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
391 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
394 ctf_integer_hex(struct page
*, page
, page
)
395 ctf_integer(unsigned long, pfn
,
396 page
? page_to_pfn(page
) : -1UL)
397 ctf_integer(unsigned int, order
, order
)
398 ctf_integer(int, migratetype
, migratetype
)
399 ctf_integer(int, percpu_refill
, percpu_refill
)
403 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
405 kmem_mm_page_alloc_zone_locked
,
407 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
410 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
413 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
415 kmem_mm_page_pcpu_drain
,
417 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
419 TP_ARGS(page
, order
, migratetype
),
422 ctf_integer(unsigned long, pfn
,
423 page
? page_to_pfn(page
) : -1UL)
424 ctf_integer(unsigned int, order
, order
)
425 ctf_integer(int, migratetype
, migratetype
)
429 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
431 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
433 TP_ARGS(page
, order
, migratetype
),
436 ctf_integer_hex(struct page
*, page
, page
)
437 ctf_integer(unsigned long, pfn
,
438 page
? page_to_pfn(page
) : -1UL)
439 ctf_integer(unsigned int, order
, order
)
440 ctf_integer(int, migratetype
, migratetype
)
444 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
446 kmem_mm_page_alloc_zone_locked
,
448 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
450 TP_ARGS(page
, order
, migratetype
)
453 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
455 kmem_mm_page_pcpu_drain
,
457 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
459 TP_ARGS(page
, order
, migratetype
)
463 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,2) \
464 || LTTNG_KERNEL_RANGE(3,14,36, 3,15,0) \
465 || LTTNG_KERNEL_RANGE(3,16,35, 3,17,0) \
466 || LTTNG_KERNEL_RANGE(3,18,10, 3,19,0) \
467 || LTTNG_DEBIAN_KERNEL_RANGE(3,16,7,9,0,0, 3,17,0,0,0,0) \
468 || LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,50, 3,14,0,0) \
469 || LTTNG_UBUNTU_KERNEL_RANGE(3,16,7,34, 3,17,0,0))
471 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
473 kmem_mm_page_alloc_extfrag
,
475 TP_PROTO(struct page
*page
,
476 int alloc_order
, int fallback_order
,
477 int alloc_migratetype
, int fallback_migratetype
),
480 alloc_order
, fallback_order
,
481 alloc_migratetype
, fallback_migratetype
),
484 ctf_integer_hex(struct page
*, page
, page
)
485 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
486 ctf_integer(int, alloc_order
, alloc_order
)
487 ctf_integer(int, fallback_order
, fallback_order
)
488 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
489 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
490 ctf_integer(int, change_ownership
,
491 (alloc_migratetype
== get_pageblock_migratetype(page
)))
495 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,30))
497 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
499 kmem_mm_page_alloc_extfrag
,
501 TP_PROTO(struct page
*page
,
502 int alloc_order
, int fallback_order
,
503 int alloc_migratetype
, int fallback_migratetype
, int new_migratetype
),
506 alloc_order
, fallback_order
,
507 alloc_migratetype
, fallback_migratetype
, new_migratetype
),
510 ctf_integer_hex(struct page
*, page
, page
)
511 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
512 ctf_integer(int, alloc_order
, alloc_order
)
513 ctf_integer(int, fallback_order
, fallback_order
)
514 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
515 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
516 ctf_integer(int, change_ownership
, (new_migratetype
== alloc_migratetype
))
520 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0))
522 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
524 kmem_mm_page_alloc_extfrag
,
526 TP_PROTO(struct page
*page
,
527 int alloc_order
, int fallback_order
,
528 int alloc_migratetype
, int fallback_migratetype
,
529 int change_ownership
),
532 alloc_order
, fallback_order
,
533 alloc_migratetype
, fallback_migratetype
,
537 ctf_integer_hex(struct page
*, page
, page
)
538 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
539 ctf_integer(int, alloc_order
, alloc_order
)
540 ctf_integer(int, fallback_order
, fallback_order
)
541 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
542 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
543 ctf_integer(int, change_ownership
, change_ownership
)
547 #else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
549 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
551 kmem_mm_page_alloc_extfrag
,
553 TP_PROTO(struct page
*page
,
554 int alloc_order
, int fallback_order
,
555 int alloc_migratetype
, int fallback_migratetype
),
558 alloc_order
, fallback_order
,
559 alloc_migratetype
, fallback_migratetype
),
562 ctf_integer_hex(struct page
*, page
, page
)
563 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
564 ctf_integer(int, alloc_order
, alloc_order
)
565 ctf_integer(int, fallback_order
, fallback_order
)
566 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
567 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
571 #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */
573 #endif /* LTTNG_TRACE_KMEM_H */
575 /* This part must be outside protection */
576 #include <lttng/define_trace.h>