| /* SPDX-License-Identifier: GPL-2.0 */ |
| #undef TRACE_SYSTEM |
| #define TRACE_SYSTEM msr |
| |
| #undef TRACE_INCLUDE_FILE |
| #define TRACE_INCLUDE_FILE msr-trace |
| |
| #undef TRACE_INCLUDE_PATH |
| #define TRACE_INCLUDE_PATH asm/ |
| |
| #if !defined(_TRACE_MSR_H) || defined(TRACE_HEADER_MULTI_READ) |
| #define _TRACE_MSR_H |
| |
| #include <linux/tracepoint.h> |
| |
| /* |
| * Tracing for x86 model specific registers. Directly maps to the |
| * RDMSR/WRMSR instructions. |
| */ |
| |
| DECLARE_EVENT_CLASS(msr_trace_class, |
| TP_PROTO(unsigned msr, u64 val, int failed), |
| TP_ARGS(msr, val, failed), |
| TP_STRUCT__entry( |
| __field( unsigned, msr ) |
| __field( u64, val ) |
| __field( int, failed ) |
| ), |
| TP_fast_assign( |
| __entry->msr = msr; |
| __entry->val = val; |
| __entry->failed = failed; |
| ), |
| TP_printk("%x, value %llx%s", |
| __entry->msr, |
| __entry->val, |
| __entry->failed ? " #GP" : "") |
| ); |
| |
| DEFINE_EVENT(msr_trace_class, read_msr, |
| TP_PROTO(unsigned msr, u64 val, int failed), |
| TP_ARGS(msr, val, failed) |
| ); |
| |
| DEFINE_EVENT(msr_trace_class, write_msr, |
| TP_PROTO(unsigned msr, u64 val, int failed), |
| TP_ARGS(msr, val, failed) |
| ); |
| |
| DEFINE_EVENT(msr_trace_class, rdpmc, |
| TP_PROTO(unsigned msr, u64 val, int failed), |
| TP_ARGS(msr, val, failed) |
| ); |
| |
| #endif /* _TRACE_MSR_H */ |
| |
| /* This part must be outside protection */ |
| #include <trace/define_trace.h> |