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