2009-06-17 16:22:14 +04:00
# if !defined(_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ)
# define _TRACE_KVM_MAIN_H
# include <linux/tracepoint.h>
# undef TRACE_SYSTEM
# define TRACE_SYSTEM kvm
2010-10-24 18:49:08 +04:00
# define ERSN(x) { KVM_EXIT_##x, "KVM_EXIT_" #x }
# define kvm_trace_exit_reason \
ERSN ( UNKNOWN ) , ERSN ( EXCEPTION ) , ERSN ( IO ) , ERSN ( HYPERCALL ) , \
ERSN ( DEBUG ) , ERSN ( HLT ) , ERSN ( MMIO ) , ERSN ( IRQ_WINDOW_OPEN ) , \
ERSN ( SHUTDOWN ) , ERSN ( FAIL_ENTRY ) , ERSN ( INTR ) , ERSN ( SET_TPR ) , \
ERSN ( TPR_ACCESS ) , ERSN ( S390_SIEIC ) , ERSN ( S390_RESET ) , ERSN ( DCR ) , \
ERSN ( NMI ) , ERSN ( INTERNAL_ERROR ) , ERSN ( OSI )
TRACE_EVENT ( kvm_userspace_exit ,
TP_PROTO ( __u32 reason , int errno ) ,
TP_ARGS ( reason , errno ) ,
TP_STRUCT__entry (
__field ( __u32 , reason )
__field ( int , errno )
) ,
TP_fast_assign (
__entry - > reason = reason ;
__entry - > errno = errno ;
) ,
TP_printk ( " reason %s (%d) " ,
__entry - > errno < 0 ?
( __entry - > errno = = - EINTR ? " restart " : " error " ) :
__print_symbolic ( __entry - > reason , kvm_trace_exit_reason ) ,
__entry - > errno < 0 ? - __entry - > errno : __entry - > reason )
) ;
2009-06-17 16:22:14 +04:00
# if defined(__KVM_HAVE_IOAPIC)
TRACE_EVENT ( kvm_set_irq ,
2009-07-01 13:09:41 +04:00
TP_PROTO ( unsigned int gsi , int level , int irq_source_id ) ,
TP_ARGS ( gsi , level , irq_source_id ) ,
2009-06-17 16:22:14 +04:00
TP_STRUCT__entry (
__field ( unsigned int , gsi )
2009-07-01 13:09:41 +04:00
__field ( int , level )
__field ( int , irq_source_id )
2009-06-17 16:22:14 +04:00
) ,
TP_fast_assign (
__entry - > gsi = gsi ;
2009-07-01 13:09:41 +04:00
__entry - > level = level ;
__entry - > irq_source_id = irq_source_id ;
2009-06-17 16:22:14 +04:00
) ,
2009-07-01 13:09:41 +04:00
TP_printk ( " gsi %u level %d source %d " ,
__entry - > gsi , __entry - > level , __entry - > irq_source_id )
2009-06-17 16:22:14 +04:00
) ;
2009-07-07 17:00:57 +04:00
# define kvm_deliver_mode \
{ 0x0 , " Fixed " } , \
{ 0x1 , " LowPrio " } , \
{ 0x2 , " SMI " } , \
{ 0x3 , " Res3 " } , \
{ 0x4 , " NMI " } , \
{ 0x5 , " INIT " } , \
{ 0x6 , " SIPI " } , \
{ 0x7 , " ExtINT " }
TRACE_EVENT ( kvm_ioapic_set_irq ,
TP_PROTO ( __u64 e , int pin , bool coalesced ) ,
TP_ARGS ( e , pin , coalesced ) ,
TP_STRUCT__entry (
__field ( __u64 , e )
__field ( int , pin )
__field ( bool , coalesced )
) ,
TP_fast_assign (
__entry - > e = e ;
__entry - > pin = pin ;
__entry - > coalesced = coalesced ;
) ,
TP_printk ( " pin %u dst %x vec=%u (%s|%s|%s%s)%s " ,
__entry - > pin , ( u8 ) ( __entry - > e > > 56 ) , ( u8 ) __entry - > e ,
__print_symbolic ( ( __entry - > e > > 8 & 0x7 ) , kvm_deliver_mode ) ,
( __entry - > e & ( 1 < < 11 ) ) ? " logical " : " physical " ,
( __entry - > e & ( 1 < < 15 ) ) ? " level " : " edge " ,
( __entry - > e & ( 1 < < 16 ) ) ? " |masked " : " " ,
__entry - > coalesced ? " (coalesced) " : " " )
) ;
TRACE_EVENT ( kvm_msi_set_irq ,
TP_PROTO ( __u64 address , __u64 data ) ,
TP_ARGS ( address , data ) ,
TP_STRUCT__entry (
__field ( __u64 , address )
__field ( __u64 , data )
) ,
TP_fast_assign (
__entry - > address = address ;
__entry - > data = data ;
) ,
TP_printk ( " dst %u vec %x (%s|%s|%s%s) " ,
( u8 ) ( __entry - > address > > 12 ) , ( u8 ) __entry - > data ,
__print_symbolic ( ( __entry - > data > > 8 & 0x7 ) , kvm_deliver_mode ) ,
( __entry - > address & ( 1 < < 2 ) ) ? " logical " : " physical " ,
( __entry - > data & ( 1 < < 15 ) ) ? " level " : " edge " ,
( __entry - > address & ( 1 < < 3 ) ) ? " |rh " : " " )
) ;
2009-06-17 16:22:14 +04:00
# define kvm_irqchips \
{ KVM_IRQCHIP_PIC_MASTER , " PIC master " } , \
{ KVM_IRQCHIP_PIC_SLAVE , " PIC slave " } , \
{ KVM_IRQCHIP_IOAPIC , " IOAPIC " }
TRACE_EVENT ( kvm_ack_irq ,
TP_PROTO ( unsigned int irqchip , unsigned int pin ) ,
TP_ARGS ( irqchip , pin ) ,
TP_STRUCT__entry (
__field ( unsigned int , irqchip )
__field ( unsigned int , pin )
) ,
TP_fast_assign (
__entry - > irqchip = irqchip ;
__entry - > pin = pin ;
) ,
TP_printk ( " irqchip %s pin %u " ,
__print_symbolic ( __entry - > irqchip , kvm_irqchips ) ,
__entry - > pin )
) ;
# endif /* defined(__KVM_HAVE_IOAPIC) */
2009-07-01 17:01:02 +04:00
# define KVM_TRACE_MMIO_READ_UNSATISFIED 0
# define KVM_TRACE_MMIO_READ 1
# define KVM_TRACE_MMIO_WRITE 2
# define kvm_trace_symbol_mmio \
{ KVM_TRACE_MMIO_READ_UNSATISFIED , " unsatisfied-read " } , \
{ KVM_TRACE_MMIO_READ , " read " } , \
{ KVM_TRACE_MMIO_WRITE , " write " }
TRACE_EVENT ( kvm_mmio ,
TP_PROTO ( int type , int len , u64 gpa , u64 val ) ,
TP_ARGS ( type , len , gpa , val ) ,
TP_STRUCT__entry (
__field ( u32 , type )
__field ( u32 , len )
__field ( u64 , gpa )
__field ( u64 , val )
) ,
TP_fast_assign (
__entry - > type = type ;
__entry - > len = len ;
__entry - > gpa = gpa ;
__entry - > val = val ;
) ,
TP_printk ( " mmio %s len %u gpa 0x%llx val 0x%llx " ,
__print_symbolic ( __entry - > type , kvm_trace_symbol_mmio ) ,
__entry - > len , __entry - > gpa , __entry - > val )
) ;
2010-01-21 16:31:52 +03:00
# define kvm_fpu_load_symbol \
{ 0 , " unload " } , \
{ 1 , " load " }
TRACE_EVENT ( kvm_fpu ,
TP_PROTO ( int load ) ,
TP_ARGS ( load ) ,
TP_STRUCT__entry (
__field ( u32 , load )
) ,
TP_fast_assign (
__entry - > load = load ;
) ,
TP_printk ( " %s " , __print_symbolic ( __entry - > load , kvm_fpu_load_symbol ) )
) ;
2009-12-31 13:10:16 +03:00
TRACE_EVENT ( kvm_age_page ,
TP_PROTO ( ulong hva , struct kvm_memory_slot * slot , int ref ) ,
TP_ARGS ( hva , slot , ref ) ,
TP_STRUCT__entry (
__field ( u64 , hva )
__field ( u64 , gfn )
__field ( u8 , referenced )
) ,
TP_fast_assign (
__entry - > hva = hva ;
__entry - > gfn =
slot - > base_gfn + ( ( hva - slot - > userspace_addr ) > > PAGE_SHIFT ) ;
__entry - > referenced = ref ;
) ,
TP_printk ( " hva %llx gfn %llx %s " ,
__entry - > hva , __entry - > gfn ,
__entry - > referenced ? " YOUNG " : " OLD " )
) ;
2010-10-14 13:22:46 +04:00
# ifdef CONFIG_KVM_ASYNC_PF
TRACE_EVENT (
kvm_try_async_get_page ,
2010-11-01 11:58:43 +03:00
TP_PROTO ( u64 gva , u64 gfn ) ,
TP_ARGS ( gva , gfn ) ,
2010-10-14 13:22:46 +04:00
TP_STRUCT__entry (
2010-11-01 11:58:43 +03:00
__field ( u64 , gva )
__field ( u64 , gfn )
2010-10-14 13:22:46 +04:00
) ,
TP_fast_assign (
2010-11-01 11:58:43 +03:00
__entry - > gva = gva ;
__entry - > gfn = gfn ;
2010-10-14 13:22:46 +04:00
) ,
2010-11-01 11:58:43 +03:00
TP_printk ( " gva = %#llx, gfn = %#llx " , __entry - > gva , __entry - > gfn )
2010-10-14 13:22:46 +04:00
) ;
TRACE_EVENT (
kvm_async_pf_not_present ,
2010-10-14 13:22:53 +04:00
TP_PROTO ( u64 token , u64 gva ) ,
TP_ARGS ( token , gva ) ,
2010-10-14 13:22:46 +04:00
TP_STRUCT__entry (
2010-10-14 13:22:53 +04:00
__field ( __u64 , token )
2010-10-14 13:22:46 +04:00
__field ( __u64 , gva )
) ,
TP_fast_assign (
2010-10-14 13:22:53 +04:00
__entry - > token = token ;
2010-10-14 13:22:46 +04:00
__entry - > gva = gva ;
) ,
2010-10-14 13:22:53 +04:00
TP_printk ( " token %#llx gva %#llx not present " , __entry - > token ,
__entry - > gva )
2010-10-14 13:22:46 +04:00
) ;
TRACE_EVENT (
kvm_async_pf_ready ,
2010-10-14 13:22:53 +04:00
TP_PROTO ( u64 token , u64 gva ) ,
TP_ARGS ( token , gva ) ,
2010-10-14 13:22:46 +04:00
TP_STRUCT__entry (
2010-10-14 13:22:53 +04:00
__field ( __u64 , token )
2010-10-14 13:22:46 +04:00
__field ( __u64 , gva )
) ,
TP_fast_assign (
2010-10-14 13:22:53 +04:00
__entry - > token = token ;
2010-10-14 13:22:46 +04:00
__entry - > gva = gva ;
) ,
2010-10-14 13:22:53 +04:00
TP_printk ( " token %#llx gva %#llx ready " , __entry - > token , __entry - > gva )
2010-10-14 13:22:46 +04:00
) ;
TRACE_EVENT (
kvm_async_pf_completed ,
TP_PROTO ( unsigned long address , struct page * page , u64 gva ) ,
TP_ARGS ( address , page , gva ) ,
TP_STRUCT__entry (
__field ( unsigned long , address )
__field ( pfn_t , pfn )
__field ( u64 , gva )
) ,
TP_fast_assign (
__entry - > address = address ;
__entry - > pfn = page ? page_to_pfn ( page ) : 0 ;
__entry - > gva = gva ;
) ,
TP_printk ( " gva %#llx address %#lx pfn %#llx " , __entry - > gva ,
__entry - > address , __entry - > pfn )
) ;
TRACE_EVENT (
kvm_async_pf_doublefault ,
TP_PROTO ( u64 gva , u64 gfn ) ,
TP_ARGS ( gva , gfn ) ,
TP_STRUCT__entry (
__field ( u64 , gva )
__field ( u64 , gfn )
) ,
TP_fast_assign (
__entry - > gva = gva ;
__entry - > gfn = gfn ;
) ,
TP_printk ( " gva = %#llx, gfn = %#llx " , __entry - > gva , __entry - > gfn )
) ;
# endif
2009-06-17 16:22:14 +04:00
# endif /* _TRACE_KVM_MAIN_H */
/* This part must be outside protection */
# include <trace/define_trace.h>