xref: /openbmc/linux/include/trace/events/vmalloc.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
13c0c9bc9SUladzislau Rezki (Sony) /* SPDX-License-Identifier: GPL-2.0 */
23c0c9bc9SUladzislau Rezki (Sony) #undef TRACE_SYSTEM
33c0c9bc9SUladzislau Rezki (Sony) #define TRACE_SYSTEM vmalloc
43c0c9bc9SUladzislau Rezki (Sony) 
53c0c9bc9SUladzislau Rezki (Sony) #if !defined(_TRACE_VMALLOC_H) || defined(TRACE_HEADER_MULTI_READ)
63c0c9bc9SUladzislau Rezki (Sony) #define _TRACE_VMALLOC_H
73c0c9bc9SUladzislau Rezki (Sony) 
83c0c9bc9SUladzislau Rezki (Sony) #include <linux/tracepoint.h>
93c0c9bc9SUladzislau Rezki (Sony) 
103c0c9bc9SUladzislau Rezki (Sony) /**
113c0c9bc9SUladzislau Rezki (Sony)  * alloc_vmap_area - called when a new vmap allocation occurs
123c0c9bc9SUladzislau Rezki (Sony)  * @addr:	an allocated address
133c0c9bc9SUladzislau Rezki (Sony)  * @size:	a requested size
143c0c9bc9SUladzislau Rezki (Sony)  * @align:	a requested alignment
153c0c9bc9SUladzislau Rezki (Sony)  * @vstart:	a requested start range
163c0c9bc9SUladzislau Rezki (Sony)  * @vend:	a requested end range
173c0c9bc9SUladzislau Rezki (Sony)  * @failed:	an allocation failed or not
183c0c9bc9SUladzislau Rezki (Sony)  *
193c0c9bc9SUladzislau Rezki (Sony)  * This event is used for a debug purpose, it can give an extra
203c0c9bc9SUladzislau Rezki (Sony)  * information for a developer about how often it occurs and which
213c0c9bc9SUladzislau Rezki (Sony)  * parameters are passed for further validation.
223c0c9bc9SUladzislau Rezki (Sony)  */
233c0c9bc9SUladzislau Rezki (Sony) TRACE_EVENT(alloc_vmap_area,
243c0c9bc9SUladzislau Rezki (Sony) 
253c0c9bc9SUladzislau Rezki (Sony) 	TP_PROTO(unsigned long addr, unsigned long size, unsigned long align,
263c0c9bc9SUladzislau Rezki (Sony) 		unsigned long vstart, unsigned long vend, int failed),
273c0c9bc9SUladzislau Rezki (Sony) 
283c0c9bc9SUladzislau Rezki (Sony) 	TP_ARGS(addr, size, align, vstart, vend, failed),
293c0c9bc9SUladzislau Rezki (Sony) 
303c0c9bc9SUladzislau Rezki (Sony) 	TP_STRUCT__entry(
313c0c9bc9SUladzislau Rezki (Sony) 		__field(unsigned long, addr)
323c0c9bc9SUladzislau Rezki (Sony) 		__field(unsigned long, size)
333c0c9bc9SUladzislau Rezki (Sony) 		__field(unsigned long, align)
343c0c9bc9SUladzislau Rezki (Sony) 		__field(unsigned long, vstart)
353c0c9bc9SUladzislau Rezki (Sony) 		__field(unsigned long, vend)
363c0c9bc9SUladzislau Rezki (Sony) 		__field(int, failed)
373c0c9bc9SUladzislau Rezki (Sony) 	),
383c0c9bc9SUladzislau Rezki (Sony) 
393c0c9bc9SUladzislau Rezki (Sony) 	TP_fast_assign(
403c0c9bc9SUladzislau Rezki (Sony) 		__entry->addr = addr;
413c0c9bc9SUladzislau Rezki (Sony) 		__entry->size = size;
423c0c9bc9SUladzislau Rezki (Sony) 		__entry->align = align;
433c0c9bc9SUladzislau Rezki (Sony) 		__entry->vstart = vstart;
443c0c9bc9SUladzislau Rezki (Sony) 		__entry->vend = vend;
453c0c9bc9SUladzislau Rezki (Sony) 		__entry->failed = failed;
463c0c9bc9SUladzislau Rezki (Sony) 	),
473c0c9bc9SUladzislau Rezki (Sony) 
483c0c9bc9SUladzislau Rezki (Sony) 	TP_printk("va_start: %lu size=%lu align=%lu vstart=0x%lx vend=0x%lx failed=%d",
493c0c9bc9SUladzislau Rezki (Sony) 		__entry->addr, __entry->size, __entry->align,
503c0c9bc9SUladzislau Rezki (Sony) 		__entry->vstart, __entry->vend, __entry->failed)
513c0c9bc9SUladzislau Rezki (Sony) );
523c0c9bc9SUladzislau Rezki (Sony) 
53b3a5a7b0SUladzislau Rezki (Sony) /**
54b3a5a7b0SUladzislau Rezki (Sony)  * purge_vmap_area_lazy - called when vmap areas were lazily freed
55b3a5a7b0SUladzislau Rezki (Sony)  * @start:		purging start address
56b3a5a7b0SUladzislau Rezki (Sony)  * @end:		purging end address
57b3a5a7b0SUladzislau Rezki (Sony)  * @npurged:	numbed of purged vmap areas
58b3a5a7b0SUladzislau Rezki (Sony)  *
59b3a5a7b0SUladzislau Rezki (Sony)  * This event is used for a debug purpose. It gives some
60b3a5a7b0SUladzislau Rezki (Sony)  * indication about start:end range and how many objects
61b3a5a7b0SUladzislau Rezki (Sony)  * are released.
62b3a5a7b0SUladzislau Rezki (Sony)  */
63b3a5a7b0SUladzislau Rezki (Sony) TRACE_EVENT(purge_vmap_area_lazy,
64b3a5a7b0SUladzislau Rezki (Sony) 
65b3a5a7b0SUladzislau Rezki (Sony) 	TP_PROTO(unsigned long start, unsigned long end,
66b3a5a7b0SUladzislau Rezki (Sony) 		unsigned int npurged),
67b3a5a7b0SUladzislau Rezki (Sony) 
68b3a5a7b0SUladzislau Rezki (Sony) 	TP_ARGS(start, end, npurged),
69b3a5a7b0SUladzislau Rezki (Sony) 
70b3a5a7b0SUladzislau Rezki (Sony) 	TP_STRUCT__entry(
71b3a5a7b0SUladzislau Rezki (Sony) 		__field(unsigned long, start)
72b3a5a7b0SUladzislau Rezki (Sony) 		__field(unsigned long, end)
73b3a5a7b0SUladzislau Rezki (Sony) 		__field(unsigned int, npurged)
74b3a5a7b0SUladzislau Rezki (Sony) 	),
75b3a5a7b0SUladzislau Rezki (Sony) 
76b3a5a7b0SUladzislau Rezki (Sony) 	TP_fast_assign(
77b3a5a7b0SUladzislau Rezki (Sony) 		__entry->start = start;
78b3a5a7b0SUladzislau Rezki (Sony) 		__entry->end = end;
79b3a5a7b0SUladzislau Rezki (Sony) 		__entry->npurged = npurged;
80b3a5a7b0SUladzislau Rezki (Sony) 	),
81b3a5a7b0SUladzislau Rezki (Sony) 
82b3a5a7b0SUladzislau Rezki (Sony) 	TP_printk("start=0x%lx end=0x%lx num_purged=%u",
83b3a5a7b0SUladzislau Rezki (Sony) 		__entry->start, __entry->end, __entry->npurged)
84b3a5a7b0SUladzislau Rezki (Sony) );
85b3a5a7b0SUladzislau Rezki (Sony) 
86*fabc27f7SUladzislau Rezki (Sony) /**
87*fabc27f7SUladzislau Rezki (Sony)  * free_vmap_area_noflush - called when a vmap area is freed
88*fabc27f7SUladzislau Rezki (Sony)  * @va_start:		a start address of VA
89*fabc27f7SUladzislau Rezki (Sony)  * @nr_lazy:		number of current lazy pages
90*fabc27f7SUladzislau Rezki (Sony)  * @nr_lazy_max:	number of maximum lazy pages
91*fabc27f7SUladzislau Rezki (Sony)  *
92*fabc27f7SUladzislau Rezki (Sony)  * This event is used for a debug purpose. It gives some
93*fabc27f7SUladzislau Rezki (Sony)  * indication about a VA that is released, number of current
94*fabc27f7SUladzislau Rezki (Sony)  * outstanding areas and a maximum allowed threshold before
95*fabc27f7SUladzislau Rezki (Sony)  * dropping all of them.
96*fabc27f7SUladzislau Rezki (Sony)  */
97*fabc27f7SUladzislau Rezki (Sony) TRACE_EVENT(free_vmap_area_noflush,
98*fabc27f7SUladzislau Rezki (Sony) 
99*fabc27f7SUladzislau Rezki (Sony) 	TP_PROTO(unsigned long va_start, unsigned long nr_lazy,
100*fabc27f7SUladzislau Rezki (Sony) 		unsigned long nr_lazy_max),
101*fabc27f7SUladzislau Rezki (Sony) 
102*fabc27f7SUladzislau Rezki (Sony) 	TP_ARGS(va_start, nr_lazy, nr_lazy_max),
103*fabc27f7SUladzislau Rezki (Sony) 
104*fabc27f7SUladzislau Rezki (Sony) 	TP_STRUCT__entry(
105*fabc27f7SUladzislau Rezki (Sony) 		__field(unsigned long, va_start)
106*fabc27f7SUladzislau Rezki (Sony) 		__field(unsigned long, nr_lazy)
107*fabc27f7SUladzislau Rezki (Sony) 		__field(unsigned long, nr_lazy_max)
108*fabc27f7SUladzislau Rezki (Sony) 	),
109*fabc27f7SUladzislau Rezki (Sony) 
110*fabc27f7SUladzislau Rezki (Sony) 	TP_fast_assign(
111*fabc27f7SUladzislau Rezki (Sony) 		__entry->va_start = va_start;
112*fabc27f7SUladzislau Rezki (Sony) 		__entry->nr_lazy = nr_lazy;
113*fabc27f7SUladzislau Rezki (Sony) 		__entry->nr_lazy_max = nr_lazy_max;
114*fabc27f7SUladzislau Rezki (Sony) 	),
115*fabc27f7SUladzislau Rezki (Sony) 
116*fabc27f7SUladzislau Rezki (Sony) 	TP_printk("va_start=0x%lx nr_lazy=%lu nr_lazy_max=%lu",
117*fabc27f7SUladzislau Rezki (Sony) 		__entry->va_start, __entry->nr_lazy, __entry->nr_lazy_max)
118*fabc27f7SUladzislau Rezki (Sony) );
119*fabc27f7SUladzislau Rezki (Sony) 
1203c0c9bc9SUladzislau Rezki (Sony) #endif /*  _TRACE_VMALLOC_H */
1213c0c9bc9SUladzislau Rezki (Sony) 
1223c0c9bc9SUladzislau Rezki (Sony) /* This part must be outside protection */
1233c0c9bc9SUladzislau Rezki (Sony) #include <trace/define_trace.h>
124