1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #undef TRACE_SYSTEM 3*4882a593Smuzhiyun #define TRACE_SYSTEM tlb 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #if !defined(_TRACE_TLB_H) || defined(TRACE_HEADER_MULTI_READ) 6*4882a593Smuzhiyun #define _TRACE_TLB_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <linux/mm_types.h> 9*4882a593Smuzhiyun #include <linux/tracepoint.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define TLB_FLUSH_REASON \ 12*4882a593Smuzhiyun EM( TLB_FLUSH_ON_TASK_SWITCH, "flush on task switch" ) \ 13*4882a593Smuzhiyun EM( TLB_REMOTE_SHOOTDOWN, "remote shootdown" ) \ 14*4882a593Smuzhiyun EM( TLB_LOCAL_SHOOTDOWN, "local shootdown" ) \ 15*4882a593Smuzhiyun EM( TLB_LOCAL_MM_SHOOTDOWN, "local mm shootdown" ) \ 16*4882a593Smuzhiyun EMe( TLB_REMOTE_SEND_IPI, "remote ipi send" ) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * First define the enums in TLB_FLUSH_REASON to be exported to userspace 20*4882a593Smuzhiyun * via TRACE_DEFINE_ENUM(). 21*4882a593Smuzhiyun */ 22*4882a593Smuzhiyun #undef EM 23*4882a593Smuzhiyun #undef EMe 24*4882a593Smuzhiyun #define EM(a,b) TRACE_DEFINE_ENUM(a); 25*4882a593Smuzhiyun #define EMe(a,b) TRACE_DEFINE_ENUM(a); 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun TLB_FLUSH_REASON 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun * Now redefine the EM() and EMe() macros to map the enums to the strings 31*4882a593Smuzhiyun * that will be printed in the output. 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun #undef EM 34*4882a593Smuzhiyun #undef EMe 35*4882a593Smuzhiyun #define EM(a,b) { a, b }, 36*4882a593Smuzhiyun #define EMe(a,b) { a, b } 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun TRACE_EVENT(tlb_flush, 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun TP_PROTO(int reason, unsigned long pages), 41*4882a593Smuzhiyun TP_ARGS(reason, pages), 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun TP_STRUCT__entry( 44*4882a593Smuzhiyun __field( int, reason) 45*4882a593Smuzhiyun __field(unsigned long, pages) 46*4882a593Smuzhiyun ), 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun TP_fast_assign( 49*4882a593Smuzhiyun __entry->reason = reason; 50*4882a593Smuzhiyun __entry->pages = pages; 51*4882a593Smuzhiyun ), 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun TP_printk("pages:%ld reason:%s (%d)", 54*4882a593Smuzhiyun __entry->pages, 55*4882a593Smuzhiyun __print_symbolic(__entry->reason, TLB_FLUSH_REASON), 56*4882a593Smuzhiyun __entry->reason) 57*4882a593Smuzhiyun ); 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #endif /* _TRACE_TLB_H */ 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* This part must be outside protection */ 62*4882a593Smuzhiyun #include <trace/define_trace.h> 63