1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 3*4882a593Smuzhiyun #define _TRACE_KVM_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/tracepoint.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #undef TRACE_SYSTEM 8*4882a593Smuzhiyun #define TRACE_SYSTEM kvm 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* 11*4882a593Smuzhiyun * Tracepoint for guest mode entry. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun TRACE_EVENT(kvm_ppc_instr, 14*4882a593Smuzhiyun TP_PROTO(unsigned int inst, unsigned long _pc, unsigned int emulate), 15*4882a593Smuzhiyun TP_ARGS(inst, _pc, emulate), 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun TP_STRUCT__entry( 18*4882a593Smuzhiyun __field( unsigned int, inst ) 19*4882a593Smuzhiyun __field( unsigned long, pc ) 20*4882a593Smuzhiyun __field( unsigned int, emulate ) 21*4882a593Smuzhiyun ), 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun TP_fast_assign( 24*4882a593Smuzhiyun __entry->inst = inst; 25*4882a593Smuzhiyun __entry->pc = _pc; 26*4882a593Smuzhiyun __entry->emulate = emulate; 27*4882a593Smuzhiyun ), 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun TP_printk("inst %u pc 0x%lx emulate %u\n", 30*4882a593Smuzhiyun __entry->inst, __entry->pc, __entry->emulate) 31*4882a593Smuzhiyun ); 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun TRACE_EVENT(kvm_stlb_inval, 34*4882a593Smuzhiyun TP_PROTO(unsigned int stlb_index), 35*4882a593Smuzhiyun TP_ARGS(stlb_index), 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun TP_STRUCT__entry( 38*4882a593Smuzhiyun __field( unsigned int, stlb_index ) 39*4882a593Smuzhiyun ), 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun TP_fast_assign( 42*4882a593Smuzhiyun __entry->stlb_index = stlb_index; 43*4882a593Smuzhiyun ), 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun TP_printk("stlb_index %u", __entry->stlb_index) 46*4882a593Smuzhiyun ); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun TRACE_EVENT(kvm_stlb_write, 49*4882a593Smuzhiyun TP_PROTO(unsigned int victim, unsigned int tid, unsigned int word0, 50*4882a593Smuzhiyun unsigned int word1, unsigned int word2), 51*4882a593Smuzhiyun TP_ARGS(victim, tid, word0, word1, word2), 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun TP_STRUCT__entry( 54*4882a593Smuzhiyun __field( unsigned int, victim ) 55*4882a593Smuzhiyun __field( unsigned int, tid ) 56*4882a593Smuzhiyun __field( unsigned int, word0 ) 57*4882a593Smuzhiyun __field( unsigned int, word1 ) 58*4882a593Smuzhiyun __field( unsigned int, word2 ) 59*4882a593Smuzhiyun ), 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun TP_fast_assign( 62*4882a593Smuzhiyun __entry->victim = victim; 63*4882a593Smuzhiyun __entry->tid = tid; 64*4882a593Smuzhiyun __entry->word0 = word0; 65*4882a593Smuzhiyun __entry->word1 = word1; 66*4882a593Smuzhiyun __entry->word2 = word2; 67*4882a593Smuzhiyun ), 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun TP_printk("victim %u tid %u w0 %u w1 %u w2 %u", 70*4882a593Smuzhiyun __entry->victim, __entry->tid, __entry->word0, 71*4882a593Smuzhiyun __entry->word1, __entry->word2) 72*4882a593Smuzhiyun ); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun TRACE_EVENT(kvm_gtlb_write, 75*4882a593Smuzhiyun TP_PROTO(unsigned int gtlb_index, unsigned int tid, unsigned int word0, 76*4882a593Smuzhiyun unsigned int word1, unsigned int word2), 77*4882a593Smuzhiyun TP_ARGS(gtlb_index, tid, word0, word1, word2), 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun TP_STRUCT__entry( 80*4882a593Smuzhiyun __field( unsigned int, gtlb_index ) 81*4882a593Smuzhiyun __field( unsigned int, tid ) 82*4882a593Smuzhiyun __field( unsigned int, word0 ) 83*4882a593Smuzhiyun __field( unsigned int, word1 ) 84*4882a593Smuzhiyun __field( unsigned int, word2 ) 85*4882a593Smuzhiyun ), 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun TP_fast_assign( 88*4882a593Smuzhiyun __entry->gtlb_index = gtlb_index; 89*4882a593Smuzhiyun __entry->tid = tid; 90*4882a593Smuzhiyun __entry->word0 = word0; 91*4882a593Smuzhiyun __entry->word1 = word1; 92*4882a593Smuzhiyun __entry->word2 = word2; 93*4882a593Smuzhiyun ), 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun TP_printk("gtlb_index %u tid %u w0 %u w1 %u w2 %u", 96*4882a593Smuzhiyun __entry->gtlb_index, __entry->tid, __entry->word0, 97*4882a593Smuzhiyun __entry->word1, __entry->word2) 98*4882a593Smuzhiyun ); 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun TRACE_EVENT(kvm_check_requests, 101*4882a593Smuzhiyun TP_PROTO(struct kvm_vcpu *vcpu), 102*4882a593Smuzhiyun TP_ARGS(vcpu), 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun TP_STRUCT__entry( 105*4882a593Smuzhiyun __field( __u32, cpu_nr ) 106*4882a593Smuzhiyun __field( __u32, requests ) 107*4882a593Smuzhiyun ), 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun TP_fast_assign( 110*4882a593Smuzhiyun __entry->cpu_nr = vcpu->vcpu_id; 111*4882a593Smuzhiyun __entry->requests = vcpu->requests; 112*4882a593Smuzhiyun ), 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun TP_printk("vcpu=%x requests=%x", 115*4882a593Smuzhiyun __entry->cpu_nr, __entry->requests) 116*4882a593Smuzhiyun ); 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #endif /* _TRACE_KVM_H */ 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* This part must be outside protection */ 121*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 122*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 125*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #include <trace/define_trace.h> 128