1 // SPDX-FileCopyrightText: 2012 Paul Woegerer <paul_woegerer@mentor.com>
3 // SPDX-License-Identifier: GPL-2.0-only
6 #define TRACE_SYSTEM kmem
8 #if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
9 #define LTTNG_TRACE_KMEM_H
11 #include <lttng/tracepoint-event.h>
12 #include <linux/types.h>
13 #include <lttng/kernel-version.h>
15 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
16 #include <../../mm/slab.h>
19 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
20 LTTNG_TRACEPOINT_EVENT_MAP(kmalloc
,
24 TP_PROTO(unsigned long call_site
,
31 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
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))
45 LTTNG_TRACEPOINT_EVENT(kmem_cache_alloc
,
47 TP_PROTO(unsigned long call_site
,
53 TP_ARGS(call_site
, ptr
, s
, gfp_flags
, node
),
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)
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))
70 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
72 TP_PROTO(unsigned long call_site
,
79 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
),
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)
93 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
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
),
100 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
103 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
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
),
108 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
)
111 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc
,
113 TP_PROTO(unsigned long call_site
,
119 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
),
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
)
130 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc
, kmalloc
,
134 TP_PROTO(unsigned long call_site
, const void *ptr
,
135 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
137 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
140 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc
, kmem_cache_alloc
,
142 TP_PROTO(unsigned long call_site
, const void *ptr
,
143 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
145 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
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))
152 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
154 TP_PROTO(unsigned long call_site
,
156 struct kmem_cache
*s
,
162 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
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)
177 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
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
),
185 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
188 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
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
),
194 TP_ARGS(call_site
, ptr
, s
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
197 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node
,
199 TP_PROTO(unsigned long call_site
,
206 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
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
)
218 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node
, kmalloc_node
,
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
),
226 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
229 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node
, kmem_cache_alloc_node
,
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
),
235 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
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
,
245 TP_PROTO(unsigned long call_site
, const void *ptr
),
247 TP_ARGS(call_site
, ptr
),
250 ctf_integer_hex(unsigned long, call_site
, call_site
)
251 ctf_integer_hex(const void *, ptr
, ptr
)
255 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free
,
257 TP_PROTO(unsigned long call_site
, const void *ptr
),
259 TP_ARGS(call_site
, ptr
),
262 ctf_integer_hex(unsigned long, call_site
, call_site
)
263 ctf_integer_hex(const void *, ptr
, ptr
)
267 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_free
, kfree
,
271 TP_PROTO(unsigned long call_site
, const void *ptr
),
273 TP_ARGS(call_site
, ptr
)
276 LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free
, kmem_cache_free
,
278 TP_PROTO(unsigned long call_site
, const void *ptr
),
280 TP_ARGS(call_site
, ptr
)
284 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
285 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
287 TP_PROTO(unsigned long call_site
, const void *ptr
, const struct kmem_cache
*s
),
289 TP_ARGS(call_site
, ptr
, s
),
292 ctf_integer_hex(unsigned long, call_site
, call_site
)
293 ctf_integer_hex(const void *, ptr
, ptr
)
294 ctf_string(name
, s
->name
)
297 #elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
298 LTTNG_TRACEPOINT_EVENT(kmem_cache_free
,
300 TP_PROTO(unsigned long call_site
, const void *ptr
, const char *name
),
302 TP_ARGS(call_site
, ptr
, name
),
305 ctf_integer_hex(unsigned long, call_site
, call_site
)
306 ctf_integer_hex(const void *, ptr
, ptr
)
307 ctf_string(name
, name
)
312 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
314 TP_PROTO(struct page
*page
, unsigned int order
),
316 TP_ARGS(page
, order
),
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
)
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
,
328 TP_PROTO(struct page
*page
),
333 ctf_integer_hex(struct page
*, page
, page
)
334 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
338 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
340 TP_PROTO(struct page
*page
, int cold
),
345 ctf_integer_hex(struct page
*, page
, page
)
346 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
347 ctf_integer(int, cold
, cold
)
352 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
354 TP_PROTO(struct page
*page
, unsigned int order
,
355 gfp_t gfp_flags
, int migratetype
),
357 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
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
)
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))
372 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
374 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
377 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
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
)
389 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
391 kmem_mm_page_alloc_zone_locked
,
393 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
396 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
399 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
401 kmem_mm_page_pcpu_drain
,
403 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
405 TP_ARGS(page
, order
, migratetype
),
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
)
415 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
417 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
419 TP_ARGS(page
, order
, migratetype
),
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
)
430 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
432 kmem_mm_page_alloc_zone_locked
,
434 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
436 TP_ARGS(page
, order
, migratetype
)
439 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
441 kmem_mm_page_pcpu_drain
,
443 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
445 TP_ARGS(page
, order
, migratetype
)
449 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
451 kmem_mm_page_alloc_extfrag
,
453 TP_PROTO(struct page
*page
,
454 int alloc_order
, int fallback_order
,
455 int alloc_migratetype
, int fallback_migratetype
),
458 alloc_order
, fallback_order
,
459 alloc_migratetype
, fallback_migratetype
),
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
)))
473 #endif /* LTTNG_TRACE_KMEM_H */
475 /* This part must be outside protection */
476 #include <lttng/define_trace.h>