^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define TRACE_SYSTEM msr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #undef TRACE_INCLUDE_FILE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define TRACE_INCLUDE_FILE msr-trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #undef TRACE_INCLUDE_PATH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define TRACE_INCLUDE_PATH asm/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #if !defined(_TRACE_MSR_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define _TRACE_MSR_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * Tracing for x86 model specific registers. Directly maps to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * RDMSR/WRMSR instructions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) DECLARE_EVENT_CLASS(msr_trace_class,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) TP_PROTO(unsigned msr, u64 val, int failed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) TP_ARGS(msr, val, failed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __field( unsigned, msr )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __field( u64, val )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __field( int, failed )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __entry->msr = msr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __entry->val = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __entry->failed = failed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) TP_printk("%x, value %llx%s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __entry->msr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __entry->val,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __entry->failed ? " #GP" : "")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) DEFINE_EVENT(msr_trace_class, read_msr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) TP_PROTO(unsigned msr, u64 val, int failed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) TP_ARGS(msr, val, failed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) DEFINE_EVENT(msr_trace_class, write_msr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) TP_PROTO(unsigned msr, u64 val, int failed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) TP_ARGS(msr, val, failed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) DEFINE_EVENT(msr_trace_class, rdpmc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) TP_PROTO(unsigned msr, u64 val, int failed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) TP_ARGS(msr, val, failed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif /* _TRACE_MSR_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #include <trace/define_trace.h>