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,348,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 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free
, kmem_mm_page_free
,
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
))
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
)
349 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc
, kmem_mm_page_alloc
,
351 TP_PROTO(struct page
*page
, unsigned int order
,
352 gfp_t gfp_flags
, int migratetype
),
354 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
357 ctf_integer_hex(struct page
*, page
, page
)
358 ctf_integer(unsigned long, pfn
,
359 page
? page_to_pfn(page
) : -1UL)
360 ctf_integer(unsigned int, order
, order
)
361 ctf_integer(gfp_t
, gfp_flags
, gfp_flags
)
362 ctf_integer(int, migratetype
, migratetype
)
366 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,19,0) || \
367 LTTNG_RHEL_KERNEL_RANGE(5,14,0,163,0,0, 5,15,0,0,0,0))
369 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
371 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
374 TP_ARGS(page
, order
, migratetype
, percpu_refill
),
377 ctf_integer_hex(struct page
*, page
, page
)
378 ctf_integer(unsigned long, pfn
,
379 page
? page_to_pfn(page
) : -1UL)
380 ctf_integer(unsigned int, order
, order
)
381 ctf_integer(int, migratetype
, migratetype
)
382 ctf_integer(int, percpu_refill
, percpu_refill
)
386 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
388 kmem_mm_page_alloc_zone_locked
,
390 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
,
393 TP_ARGS(page
, order
, migratetype
, percpu_refill
)
396 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_pcpu_drain
,
398 kmem_mm_page_pcpu_drain
,
400 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
402 TP_ARGS(page
, order
, migratetype
),
405 ctf_integer(unsigned long, pfn
,
406 page
? page_to_pfn(page
) : -1UL)
407 ctf_integer(unsigned int, order
, order
)
408 ctf_integer(int, migratetype
, migratetype
)
412 LTTNG_TRACEPOINT_EVENT_CLASS(kmem_mm_page
,
414 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
416 TP_ARGS(page
, order
, migratetype
),
419 ctf_integer_hex(struct page
*, page
, page
)
420 ctf_integer(unsigned long, pfn
,
421 page
? page_to_pfn(page
) : -1UL)
422 ctf_integer(unsigned int, order
, order
)
423 ctf_integer(int, migratetype
, migratetype
)
427 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_alloc_zone_locked
,
429 kmem_mm_page_alloc_zone_locked
,
431 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
433 TP_ARGS(page
, order
, migratetype
)
436 LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_mm_page
, mm_page_pcpu_drain
,
438 kmem_mm_page_pcpu_drain
,
440 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
442 TP_ARGS(page
, order
, migratetype
)
446 LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag
,
448 kmem_mm_page_alloc_extfrag
,
450 TP_PROTO(struct page
*page
,
451 int alloc_order
, int fallback_order
,
452 int alloc_migratetype
, int fallback_migratetype
),
455 alloc_order
, fallback_order
,
456 alloc_migratetype
, fallback_migratetype
),
459 ctf_integer_hex(struct page
*, page
, page
)
460 ctf_integer(unsigned long, pfn
, page_to_pfn(page
))
461 ctf_integer(int, alloc_order
, alloc_order
)
462 ctf_integer(int, fallback_order
, fallback_order
)
463 ctf_integer(int, alloc_migratetype
, alloc_migratetype
)
464 ctf_integer(int, fallback_migratetype
, fallback_migratetype
)
465 ctf_integer(int, change_ownership
,
466 (alloc_migratetype
== get_pageblock_migratetype(page
)))
470 #endif /* LTTNG_TRACE_KMEM_H */
472 /* This part must be outside protection */
473 #include <lttng/define_trace.h>