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 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
307 TP_PROTO(struct page
*page
, unsigned int order
),
309 TP_ARGS(page
, order
),
312 ctf_integer_hex(struct page
*, page
, page
)
313 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
314 ctf_integer(unsigned int, order
, order
)
318 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
319 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
321 TP_PROTO(struct page
*page
),
326 ctf_integer_hex(struct page
*, page
, page
)
327 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
331 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free_batched
, kmem_mm_page_free_batched
,
333 TP_PROTO(struct page
*page
, int cold
),
338 ctf_integer_hex(struct page
*, page
, page
)
339 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
340 ctf_integer(int, cold
, cold
)
345 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
347 TP_PROTO(struct page
*page
, unsigned int order
,
348 gfp_t gfp_flags
, int migratetype
),
350 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
353 ctf_integer_hex(struct page
*, page
, page
)
354 ctf_integer(unsigned long, pfn
,
355 page
? page_to_pfn(page
) : -1UL)
356 ctf_integer(unsigned int, order
, order
)
357 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
358 ctf_integer(int, migratetype
, migratetype
)
362 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0))
363 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
365 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
368 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
371 ctf_integer_hex(struct page
*, page
, page
)
372 ctf_integer(unsigned long, pfn
,
373 page
? page_to_pfn(page
) : -1UL)
374 ctf_integer(unsigned int, order
, order
)
375 ctf_integer(int, migratetype
, migratetype
)
376 ctf_integer(int, percpu_refill
, percpu_refill
)
380 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
382 kmem_mm_page_alloc_zone_locked
,
384 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
387 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
390 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
392 kmem_mm_page_pcpu_drain
,
394 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
396 TP_ARGS(page
, order
, migratetype
),
399 ctf_integer(unsigned long, pfn
,
400 page
? page_to_pfn(page
) : -1UL)
401 ctf_integer(unsigned int, order
, order
)
402 ctf_integer(int, migratetype
, migratetype
)
406 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
408 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
410 TP_ARGS(page
, order
, migratetype
),
413 ctf_integer_hex(struct page
*, page
, page
)
414 ctf_integer(unsigned long, pfn
,
415 page
? page_to_pfn(page
) : -1UL)
416 ctf_integer(unsigned int, order
, order
)
417 ctf_integer(int, migratetype
, migratetype
)
421 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
423 kmem_mm_page_alloc_zone_locked
,
425 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
427 TP_ARGS(page
, order
, migratetype
)
430 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
432 kmem_mm_page_pcpu_drain
,
434 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
436 TP_ARGS(page
, order
, migratetype
)
440 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
442 kmem_mm_page_alloc_extfrag
,
444 TP_PROTO(struct page
*page
,
445 int alloc_order
, int fallback_order
,
446 int alloc_migratetype
, int fallback_migratetype
),
449 alloc_order
, fallback_order
,
450 alloc_migratetype
, fallback_migratetype
),
453 ctf_integer_hex(struct page
*, page
, page
)
454 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
455 ctf_integer(int, alloc_order
, alloc_order
)
456 ctf_integer(int, fallback_order
, fallback_order
)
457 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
458 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
459 ctf_integer(int, change_ownership
,
460 (alloc_migratetype
== get_pageblock_migratetype(page
)))
464 #endif /* LTTNG_TRACE_KMEM_H */
466 /* This part must be outside protection */
467 #include <lttng/define_trace.h>