/* 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> 
 |