2 #define TRACE_SYSTEM kmem
4 #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
7 #include <linux/types.h>
8 #include <linux/tracepoint.h>
9 #include <trace/events/gfpflags.h>
11 DECLARE_EVENT_CLASS(kmem_alloc
,
13 TP_PROTO(unsigned long call_site
,
19 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
),
22 __field( unsigned long, call_site
)
23 __field( const void *, ptr
)
24 __field( size_t, bytes_req
)
25 __field( size_t, bytes_alloc
)
26 __field( gfp_t
, gfp_flags
)
30 __entry
->call_site
= call_site
;
32 __entry
->bytes_req
= bytes_req
;
33 __entry
->bytes_alloc
= bytes_alloc
;
34 __entry
->gfp_flags
= gfp_flags
;
37 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s",
42 show_gfp_flags(__entry
->gfp_flags
))
45 DEFINE_EVENT(kmem_alloc
, kmalloc
,
47 TP_PROTO(unsigned long call_site
, const void *ptr
,
48 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
50 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
53 DEFINE_EVENT(kmem_alloc
, kmem_cache_alloc
,
55 TP_PROTO(unsigned long call_site
, const void *ptr
,
56 size_t bytes_req
, size_t bytes_alloc
, gfp_t gfp_flags
),
58 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
)
61 DECLARE_EVENT_CLASS(kmem_alloc_node
,
63 TP_PROTO(unsigned long call_site
,
70 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
),
73 __field( unsigned long, call_site
)
74 __field( const void *, ptr
)
75 __field( size_t, bytes_req
)
76 __field( size_t, bytes_alloc
)
77 __field( gfp_t
, gfp_flags
)
82 __entry
->call_site
= call_site
;
84 __entry
->bytes_req
= bytes_req
;
85 __entry
->bytes_alloc
= bytes_alloc
;
86 __entry
->gfp_flags
= gfp_flags
;
90 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d",
95 show_gfp_flags(__entry
->gfp_flags
),
99 DEFINE_EVENT(kmem_alloc_node
, kmalloc_node
,
101 TP_PROTO(unsigned long call_site
, const void *ptr
,
102 size_t bytes_req
, size_t bytes_alloc
,
103 gfp_t gfp_flags
, int node
),
105 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
108 DEFINE_EVENT(kmem_alloc_node
, kmem_cache_alloc_node
,
110 TP_PROTO(unsigned long call_site
, const void *ptr
,
111 size_t bytes_req
, size_t bytes_alloc
,
112 gfp_t gfp_flags
, int node
),
114 TP_ARGS(call_site
, ptr
, bytes_req
, bytes_alloc
, gfp_flags
, node
)
117 DECLARE_EVENT_CLASS(kmem_free
,
119 TP_PROTO(unsigned long call_site
, const void *ptr
),
121 TP_ARGS(call_site
, ptr
),
124 __field( unsigned long, call_site
)
125 __field( const void *, ptr
)
129 __entry
->call_site
= call_site
;
133 TP_printk("call_site=%lx ptr=%p", __entry
->call_site
, __entry
->ptr
)
136 DEFINE_EVENT(kmem_free
, kfree
,
138 TP_PROTO(unsigned long call_site
, const void *ptr
),
140 TP_ARGS(call_site
, ptr
)
143 DEFINE_EVENT_CONDITION(kmem_free
, kmem_cache_free
,
145 TP_PROTO(unsigned long call_site
, const void *ptr
),
147 TP_ARGS(call_site
, ptr
),
150 * This trace can be potentially called from an offlined cpu.
151 * Since trace points use RCU and RCU should not be used from
152 * offline cpus, filter such calls out.
153 * While this trace can be called from a preemptable section,
154 * it has no impact on the condition since tasks can migrate
155 * only from online cpus to other online cpus. Thus its safe
156 * to use raw_smp_processor_id.
158 TP_CONDITION(cpu_online(raw_smp_processor_id()))
161 TRACE_EVENT_CONDITION(mm_page_free
,
163 TP_PROTO(struct page
*page
, unsigned int order
),
165 TP_ARGS(page
, order
),
169 * This trace can be potentially called from an offlined cpu.
170 * Since trace points use RCU and RCU should not be used from
171 * offline cpus, filter such calls out.
172 * While this trace can be called from a preemptable section,
173 * it has no impact on the condition since tasks can migrate
174 * only from online cpus to other online cpus. Thus its safe
175 * to use raw_smp_processor_id.
177 TP_CONDITION(cpu_online(raw_smp_processor_id())),
180 __field( unsigned long, pfn
)
181 __field( unsigned int, order
)
185 __entry
->pfn
= page_to_pfn(page
);
186 __entry
->order
= order
;
189 TP_printk("page=%p pfn=%lu order=%d",
190 pfn_to_page(__entry
->pfn
),
195 TRACE_EVENT(mm_page_free_batched
,
197 TP_PROTO(struct page
*page
, int cold
),
202 __field( unsigned long, pfn
)
207 __entry
->pfn
= page_to_pfn(page
);
208 __entry
->cold
= cold
;
211 TP_printk("page=%p pfn=%lu order=0 cold=%d",
212 pfn_to_page(__entry
->pfn
),
217 TRACE_EVENT(mm_page_alloc
,
219 TP_PROTO(struct page
*page
, unsigned int order
,
220 gfp_t gfp_flags
, int migratetype
),
222 TP_ARGS(page
, order
, gfp_flags
, migratetype
),
225 __field( unsigned long, pfn
)
226 __field( unsigned int, order
)
227 __field( gfp_t
, gfp_flags
)
228 __field( int, migratetype
)
232 __entry
->pfn
= page
? page_to_pfn(page
) : -1UL;
233 __entry
->order
= order
;
234 __entry
->gfp_flags
= gfp_flags
;
235 __entry
->migratetype
= migratetype
;
238 TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s",
239 __entry
->pfn
!= -1UL ? pfn_to_page(__entry
->pfn
) : NULL
,
240 __entry
->pfn
!= -1UL ? __entry
->pfn
: 0,
242 __entry
->migratetype
,
243 show_gfp_flags(__entry
->gfp_flags
))
246 DECLARE_EVENT_CLASS(mm_page
,
248 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
250 TP_ARGS(page
, order
, migratetype
),
253 __field( unsigned long, pfn
)
254 __field( unsigned int, order
)
255 __field( int, migratetype
)
259 __entry
->pfn
= page
? page_to_pfn(page
) : -1UL;
260 __entry
->order
= order
;
261 __entry
->migratetype
= migratetype
;
264 TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d",
265 __entry
->pfn
!= -1UL ? pfn_to_page(__entry
->pfn
) : NULL
,
266 __entry
->pfn
!= -1UL ? __entry
->pfn
: 0,
268 __entry
->migratetype
,
272 DEFINE_EVENT(mm_page
, mm_page_alloc_zone_locked
,
274 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
276 TP_ARGS(page
, order
, migratetype
)
279 TRACE_EVENT_CONDITION(mm_page_pcpu_drain
,
281 TP_PROTO(struct page
*page
, unsigned int order
, int migratetype
),
283 TP_ARGS(page
, order
, migratetype
),
286 * This trace can be potentially called from an offlined cpu.
287 * Since trace points use RCU and RCU should not be used from
288 * offline cpus, filter such calls out.
289 * While this trace can be called from a preemptable section,
290 * it has no impact on the condition since tasks can migrate
291 * only from online cpus to other online cpus. Thus its safe
292 * to use raw_smp_processor_id.
294 TP_CONDITION(cpu_online(raw_smp_processor_id())),
297 __field( unsigned long, pfn
)
298 __field( unsigned int, order
)
299 __field( int, migratetype
)
303 __entry
->pfn
= page
? page_to_pfn(page
) : -1UL;
304 __entry
->order
= order
;
305 __entry
->migratetype
= migratetype
;
308 TP_printk("page=%p pfn=%lu order=%d migratetype=%d",
309 pfn_to_page(__entry
->pfn
), __entry
->pfn
,
310 __entry
->order
, __entry
->migratetype
)
313 TRACE_EVENT(mm_page_alloc_extfrag
,
315 TP_PROTO(struct page
*page
,
316 int alloc_order
, int fallback_order
,
317 int alloc_migratetype
, int fallback_migratetype
),
320 alloc_order
, fallback_order
,
321 alloc_migratetype
, fallback_migratetype
),
324 __field( unsigned long, pfn
)
325 __field( int, alloc_order
)
326 __field( int, fallback_order
)
327 __field( int, alloc_migratetype
)
328 __field( int, fallback_migratetype
)
329 __field( int, change_ownership
)
333 __entry
->pfn
= page_to_pfn(page
);
334 __entry
->alloc_order
= alloc_order
;
335 __entry
->fallback_order
= fallback_order
;
336 __entry
->alloc_migratetype
= alloc_migratetype
;
337 __entry
->fallback_migratetype
= fallback_migratetype
;
338 __entry
->change_ownership
= (alloc_migratetype
==
339 get_pageblock_migratetype(page
));
342 TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d",
343 pfn_to_page(__entry
->pfn
),
345 __entry
->alloc_order
,
346 __entry
->fallback_order
,
348 __entry
->alloc_migratetype
,
349 __entry
->fallback_migratetype
,
350 __entry
->fallback_order
< pageblock_order
,
351 __entry
->change_ownership
)
354 #endif /* _TRACE_KMEM_H */
356 /* This part must be outside protection */
357 #include <trace/define_trace.h>