| /* SPDX-License-Identifier: GPL-2.0 */ |
| #undef TRACE_SYSTEM |
| #define TRACE_SYSTEM tlb |
| |
| #if !defined(_TRACE_TLB_H) || defined(TRACE_HEADER_MULTI_READ) |
| #define _TRACE_TLB_H |
| |
| #include <linux/mm_types.h> |
| #include <linux/tracepoint.h> |
| |
| #define TLB_FLUSH_REASON \ |
| EM( TLB_FLUSH_ON_TASK_SWITCH, "flush on task switch" ) \ |
| EM( TLB_REMOTE_SHOOTDOWN, "remote shootdown" ) \ |
| EM( TLB_LOCAL_SHOOTDOWN, "local shootdown" ) \ |
| EM( TLB_LOCAL_MM_SHOOTDOWN, "local mm shootdown" ) \ |
| EMe( TLB_REMOTE_SEND_IPI, "remote ipi send" ) |
| |
| /* |
| * First define the enums in TLB_FLUSH_REASON to be exported to userspace |
| * via TRACE_DEFINE_ENUM(). |
| */ |
| #undef EM |
| #undef EMe |
| #define EM(a,b) TRACE_DEFINE_ENUM(a); |
| #define EMe(a,b) TRACE_DEFINE_ENUM(a); |
| |
| TLB_FLUSH_REASON |
| |
| /* |
| * Now redefine the EM() and EMe() macros to map the enums to the strings |
| * that will be printed in the output. |
| */ |
| #undef EM |
| #undef EMe |
| #define EM(a,b) { a, b }, |
| #define EMe(a,b) { a, b } |
| |
| TRACE_EVENT(tlb_flush, |
| |
| TP_PROTO(int reason, unsigned long pages), |
| TP_ARGS(reason, pages), |
| |
| TP_STRUCT__entry( |
| __field( int, reason) |
| __field(unsigned long, pages) |
| ), |
| |
| TP_fast_assign( |
| __entry->reason = reason; |
| __entry->pages = pages; |
| ), |
| |
| TP_printk("pages:%ld reason:%s (%d)", |
| __entry->pages, |
| __print_symbolic(__entry->reason, TLB_FLUSH_REASON), |
| __entry->reason) |
| ); |
| |
| #endif /* _TRACE_TLB_H */ |
| |
| /* This part must be outside protection */ |
| #include <trace/define_trace.h> |