2015-01-09 12:34:36 +03:00
/*
* Copyright 2015 IBM Corp .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# undef TRACE_SYSTEM
# define TRACE_SYSTEM cxl
# if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
# define _CXL_TRACE_H
# include <linux/tracepoint.h>
# include "cxl.h"
2017-04-12 17:34:07 +03:00
# define dsisr_psl9_flags(flags) \
__print_flags ( flags , " | " , \
{ CXL_PSL9_DSISR_An_CO_MASK , " FR " } , \
{ CXL_PSL9_DSISR_An_TF , " TF " } , \
{ CXL_PSL9_DSISR_An_PE , " PE " } , \
{ CXL_PSL9_DSISR_An_AE , " AE " } , \
{ CXL_PSL9_DSISR_An_OC , " OC " } , \
{ CXL_PSL9_DSISR_An_S , " S " } )
2015-01-09 12:34:36 +03:00
# define DSISR_FLAGS \
{ CXL_PSL_DSISR_An_DS , " DS " } , \
{ CXL_PSL_DSISR_An_DM , " DM " } , \
{ CXL_PSL_DSISR_An_ST , " ST " } , \
{ CXL_PSL_DSISR_An_UR , " UR " } , \
{ CXL_PSL_DSISR_An_PE , " PE " } , \
{ CXL_PSL_DSISR_An_AE , " AE " } , \
{ CXL_PSL_DSISR_An_OC , " OC " } , \
{ CXL_PSL_DSISR_An_M , " M " } , \
{ CXL_PSL_DSISR_An_P , " P " } , \
{ CXL_PSL_DSISR_An_A , " A " } , \
{ CXL_PSL_DSISR_An_S , " S " } , \
{ CXL_PSL_DSISR_An_K , " K " }
# define TFC_FLAGS \
{ CXL_PSL_TFC_An_A , " A " } , \
{ CXL_PSL_TFC_An_C , " C " } , \
{ CXL_PSL_TFC_An_AE , " AE " } , \
{ CXL_PSL_TFC_An_R , " R " }
# define LLCMD_NAMES \
{ CXL_SPA_SW_CMD_TERMINATE , " TERMINATE " } , \
{ CXL_SPA_SW_CMD_REMOVE , " REMOVE " } , \
{ CXL_SPA_SW_CMD_SUSPEND , " SUSPEND " } , \
{ CXL_SPA_SW_CMD_RESUME , " RESUME " } , \
{ CXL_SPA_SW_CMD_ADD , " ADD " } , \
{ CXL_SPA_SW_CMD_UPDATE , " UPDATE " }
# define AFU_COMMANDS \
{ 0 , " DISABLE " } , \
{ CXL_AFU_Cntl_An_E , " ENABLE " } , \
{ CXL_AFU_Cntl_An_RA , " RESET " }
# define PSL_COMMANDS \
{ CXL_PSL_SCNTL_An_Pc , " PURGE " } , \
{ CXL_PSL_SCNTL_An_Sc , " SUSPEND " }
DECLARE_EVENT_CLASS ( cxl_pe_class ,
TP_PROTO ( struct cxl_context * ctx ) ,
TP_ARGS ( ctx ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
) ,
TP_printk ( " afu%i.%i pe=%i " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe
)
) ;
TRACE_EVENT ( cxl_attach ,
TP_PROTO ( struct cxl_context * ctx , u64 wed , s16 num_interrupts , u64 amr ) ,
TP_ARGS ( ctx , wed , num_interrupts , amr ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( pid_t , pid )
__field ( u64 , wed )
__field ( u64 , amr )
__field ( s16 , num_interrupts )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > pid = pid_nr ( ctx - > pid ) ;
__entry - > wed = wed ;
__entry - > amr = amr ;
__entry - > num_interrupts = num_interrupts ;
) ,
2015-06-11 14:27:52 +03:00
TP_printk ( " afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx " ,
2015-01-09 12:34:36 +03:00
__entry - > card ,
__entry - > afu ,
__entry - > pid ,
__entry - > pe ,
__entry - > wed ,
__entry - > num_interrupts ,
__entry - > amr
)
) ;
DEFINE_EVENT ( cxl_pe_class , cxl_detach ,
TP_PROTO ( struct cxl_context * ctx ) ,
TP_ARGS ( ctx )
) ;
TRACE_EVENT ( cxl_afu_irq ,
TP_PROTO ( struct cxl_context * ctx , int afu_irq , int virq , irq_hw_number_t hwirq ) ,
TP_ARGS ( ctx , afu_irq , virq , hwirq ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u16 , afu_irq )
__field ( int , virq )
__field ( irq_hw_number_t , hwirq )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > afu_irq = afu_irq ;
__entry - > virq = virq ;
__entry - > hwirq = hwirq ;
) ,
TP_printk ( " afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__entry - > afu_irq ,
__entry - > virq ,
__entry - > hwirq
)
) ;
2017-04-12 17:34:07 +03:00
TRACE_EVENT ( cxl_psl9_irq ,
TP_PROTO ( struct cxl_context * ctx , int irq , u64 dsisr , u64 dar ) ,
TP_ARGS ( ctx , irq , dsisr , dar ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( int , irq )
__field ( u64 , dsisr )
__field ( u64 , dar )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > irq = irq ;
__entry - > dsisr = dsisr ;
__entry - > dar = dar ;
) ,
TP_printk ( " afu%i.%i pe=%i irq=%i dsisr=0x%016llx dsisr=%s dar=0x%016llx " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__entry - > irq ,
__entry - > dsisr ,
dsisr_psl9_flags ( __entry - > dsisr ) ,
__entry - > dar
)
) ;
2015-01-09 12:34:36 +03:00
TRACE_EVENT ( cxl_psl_irq ,
TP_PROTO ( struct cxl_context * ctx , int irq , u64 dsisr , u64 dar ) ,
TP_ARGS ( ctx , irq , dsisr , dar ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( int , irq )
__field ( u64 , dsisr )
__field ( u64 , dar )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > irq = irq ;
__entry - > dsisr = dsisr ;
__entry - > dar = dar ;
) ,
2015-06-11 14:27:52 +03:00
TP_printk ( " afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx " ,
2015-01-09 12:34:36 +03:00
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__entry - > irq ,
__print_flags ( __entry - > dsisr , " | " , DSISR_FLAGS ) ,
__entry - > dar
)
) ;
TRACE_EVENT ( cxl_psl_irq_ack ,
TP_PROTO ( struct cxl_context * ctx , u64 tfc ) ,
TP_ARGS ( ctx , tfc ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u64 , tfc )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > tfc = tfc ;
) ,
TP_printk ( " afu%i.%i pe=%i tfc=%s " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__print_flags ( __entry - > tfc , " | " , TFC_FLAGS )
)
) ;
TRACE_EVENT ( cxl_ste_miss ,
TP_PROTO ( struct cxl_context * ctx , u64 dar ) ,
TP_ARGS ( ctx , dar ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u64 , dar )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > dar = dar ;
) ,
2015-06-11 14:27:52 +03:00
TP_printk ( " afu%i.%i pe=%i dar=0x%016llx " ,
2015-01-09 12:34:36 +03:00
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__entry - > dar
)
) ;
TRACE_EVENT ( cxl_ste_write ,
TP_PROTO ( struct cxl_context * ctx , unsigned int idx , u64 e , u64 v ) ,
TP_ARGS ( ctx , idx , e , v ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( unsigned int , idx )
__field ( u64 , e )
__field ( u64 , v )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > idx = idx ;
__entry - > e = e ;
__entry - > v = v ;
) ,
2015-06-11 14:27:52 +03:00
TP_printk ( " afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx " ,
2015-01-09 12:34:36 +03:00
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__entry - > idx ,
__entry - > e ,
__entry - > v
)
) ;
TRACE_EVENT ( cxl_pte_miss ,
TP_PROTO ( struct cxl_context * ctx , u64 dsisr , u64 dar ) ,
TP_ARGS ( ctx , dsisr , dar ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u64 , dsisr )
__field ( u64 , dar )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > dsisr = dsisr ;
__entry - > dar = dar ;
) ,
2015-06-11 14:27:52 +03:00
TP_printk ( " afu%i.%i pe=%i dsisr=%s dar=0x%016llx " ,
2015-01-09 12:34:36 +03:00
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__print_flags ( __entry - > dsisr , " | " , DSISR_FLAGS ) ,
__entry - > dar
)
) ;
TRACE_EVENT ( cxl_llcmd ,
TP_PROTO ( struct cxl_context * ctx , u64 cmd ) ,
TP_ARGS ( ctx , cmd ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u64 , cmd )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > cmd = cmd ;
) ,
TP_printk ( " afu%i.%i pe=%i cmd=%s " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__print_symbolic_u64 ( __entry - > cmd , LLCMD_NAMES )
)
) ;
TRACE_EVENT ( cxl_llcmd_done ,
TP_PROTO ( struct cxl_context * ctx , u64 cmd , int rc ) ,
TP_ARGS ( ctx , cmd , rc ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u16 , pe )
__field ( u64 , cmd )
__field ( int , rc )
) ,
TP_fast_assign (
__entry - > card = ctx - > afu - > adapter - > adapter_num ;
__entry - > afu = ctx - > afu - > slice ;
__entry - > pe = ctx - > pe ;
__entry - > rc = rc ;
__entry - > cmd = cmd ;
) ,
TP_printk ( " afu%i.%i pe=%i cmd=%s rc=%i " ,
__entry - > card ,
__entry - > afu ,
__entry - > pe ,
__print_symbolic_u64 ( __entry - > cmd , LLCMD_NAMES ) ,
__entry - > rc
)
) ;
DECLARE_EVENT_CLASS ( cxl_afu_psl_ctrl ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd ) ,
TP_ARGS ( afu , cmd ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u64 , cmd )
) ,
TP_fast_assign (
__entry - > card = afu - > adapter - > adapter_num ;
__entry - > afu = afu - > slice ;
__entry - > cmd = cmd ;
) ,
TP_printk ( " afu%i.%i cmd=%s " ,
__entry - > card ,
__entry - > afu ,
__print_symbolic_u64 ( __entry - > cmd , AFU_COMMANDS )
)
) ;
DECLARE_EVENT_CLASS ( cxl_afu_psl_ctrl_done ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd , int rc ) ,
TP_ARGS ( afu , cmd , rc ) ,
TP_STRUCT__entry (
__field ( u8 , card )
__field ( u8 , afu )
__field ( u64 , cmd )
__field ( int , rc )
) ,
TP_fast_assign (
__entry - > card = afu - > adapter - > adapter_num ;
__entry - > afu = afu - > slice ;
__entry - > rc = rc ;
__entry - > cmd = cmd ;
) ,
TP_printk ( " afu%i.%i cmd=%s rc=%i " ,
__entry - > card ,
__entry - > afu ,
__print_symbolic_u64 ( __entry - > cmd , AFU_COMMANDS ) ,
__entry - > rc
)
) ;
DEFINE_EVENT ( cxl_afu_psl_ctrl , cxl_afu_ctrl ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd ) ,
TP_ARGS ( afu , cmd )
) ;
DEFINE_EVENT ( cxl_afu_psl_ctrl_done , cxl_afu_ctrl_done ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd , int rc ) ,
TP_ARGS ( afu , cmd , rc )
) ;
DEFINE_EVENT_PRINT ( cxl_afu_psl_ctrl , cxl_psl_ctrl ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd ) ,
TP_ARGS ( afu , cmd ) ,
TP_printk ( " psl%i.%i cmd=%s " ,
__entry - > card ,
__entry - > afu ,
__print_symbolic_u64 ( __entry - > cmd , PSL_COMMANDS )
)
) ;
DEFINE_EVENT_PRINT ( cxl_afu_psl_ctrl_done , cxl_psl_ctrl_done ,
TP_PROTO ( struct cxl_afu * afu , u64 cmd , int rc ) ,
TP_ARGS ( afu , cmd , rc ) ,
TP_printk ( " psl%i.%i cmd=%s rc=%i " ,
__entry - > card ,
__entry - > afu ,
__print_symbolic_u64 ( __entry - > cmd , PSL_COMMANDS ) ,
__entry - > rc
)
) ;
DEFINE_EVENT ( cxl_pe_class , cxl_slbia ,
TP_PROTO ( struct cxl_context * ctx ) ,
TP_ARGS ( ctx )
) ;
2016-03-04 14:26:42 +03:00
TRACE_EVENT ( cxl_hcall ,
TP_PROTO ( u64 unit_address , u64 process_token , long rc ) ,
TP_ARGS ( unit_address , process_token , rc ) ,
TP_STRUCT__entry (
__field ( u64 , unit_address )
__field ( u64 , process_token )
__field ( long , rc )
) ,
TP_fast_assign (
__entry - > unit_address = unit_address ;
__entry - > process_token = process_token ;
__entry - > rc = rc ;
) ,
TP_printk ( " unit_address=0x%016llx process_token=0x%016llx rc=%li " ,
__entry - > unit_address ,
__entry - > process_token ,
__entry - > rc
)
) ;
TRACE_EVENT ( cxl_hcall_control ,
TP_PROTO ( u64 unit_address , char * fct , u64 p1 , u64 p2 , u64 p3 ,
u64 p4 , unsigned long r4 , long rc ) ,
TP_ARGS ( unit_address , fct , p1 , p2 , p3 , p4 , r4 , rc ) ,
TP_STRUCT__entry (
__field ( u64 , unit_address )
__field ( char * , fct )
__field ( u64 , p1 )
__field ( u64 , p2 )
__field ( u64 , p3 )
__field ( u64 , p4 )
__field ( unsigned long , r4 )
__field ( long , rc )
) ,
TP_fast_assign (
__entry - > unit_address = unit_address ;
__entry - > fct = fct ;
__entry - > p1 = p1 ;
__entry - > p2 = p2 ;
__entry - > p3 = p3 ;
__entry - > p4 = p4 ;
__entry - > r4 = r4 ;
__entry - > rc = rc ;
) ,
TP_printk ( " unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li " ,
__entry - > unit_address ,
__entry - > fct ,
__entry - > p1 ,
__entry - > p2 ,
__entry - > p3 ,
__entry - > p4 ,
__entry - > r4 ,
__entry - > rc
)
) ;
TRACE_EVENT ( cxl_hcall_attach ,
TP_PROTO ( u64 unit_address , u64 phys_addr , unsigned long process_token ,
unsigned long mmio_addr , unsigned long mmio_size , long rc ) ,
TP_ARGS ( unit_address , phys_addr , process_token ,
mmio_addr , mmio_size , rc ) ,
TP_STRUCT__entry (
__field ( u64 , unit_address )
__field ( u64 , phys_addr )
__field ( unsigned long , process_token )
__field ( unsigned long , mmio_addr )
__field ( unsigned long , mmio_size )
__field ( long , rc )
) ,
TP_fast_assign (
__entry - > unit_address = unit_address ;
__entry - > phys_addr = phys_addr ;
__entry - > process_token = process_token ;
__entry - > mmio_addr = mmio_addr ;
__entry - > mmio_size = mmio_size ;
__entry - > rc = rc ;
) ,
TP_printk ( " unit_address=0x%016llx phys_addr=0x%016llx "
" token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li " ,
__entry - > unit_address ,
__entry - > phys_addr ,
__entry - > process_token ,
__entry - > mmio_addr ,
__entry - > mmio_size ,
__entry - > rc
)
) ;
DEFINE_EVENT ( cxl_hcall , cxl_hcall_detach ,
TP_PROTO ( u64 unit_address , u64 process_token , long rc ) ,
TP_ARGS ( unit_address , process_token , rc )
) ;
DEFINE_EVENT ( cxl_hcall_control , cxl_hcall_control_function ,
TP_PROTO ( u64 unit_address , char * fct , u64 p1 , u64 p2 , u64 p3 ,
u64 p4 , unsigned long r4 , long rc ) ,
TP_ARGS ( unit_address , fct , p1 , p2 , p3 , p4 , r4 , rc )
) ;
DEFINE_EVENT ( cxl_hcall , cxl_hcall_collect_int_info ,
TP_PROTO ( u64 unit_address , u64 process_token , long rc ) ,
TP_ARGS ( unit_address , process_token , rc )
) ;
TRACE_EVENT ( cxl_hcall_control_faults ,
TP_PROTO ( u64 unit_address , u64 process_token ,
u64 control_mask , u64 reset_mask , unsigned long r4 ,
long rc ) ,
TP_ARGS ( unit_address , process_token ,
control_mask , reset_mask , r4 , rc ) ,
TP_STRUCT__entry (
__field ( u64 , unit_address )
__field ( u64 , process_token )
__field ( u64 , control_mask )
__field ( u64 , reset_mask )
__field ( unsigned long , r4 )
__field ( long , rc )
) ,
TP_fast_assign (
__entry - > unit_address = unit_address ;
__entry - > process_token = process_token ;
__entry - > control_mask = control_mask ;
__entry - > reset_mask = reset_mask ;
__entry - > r4 = r4 ;
__entry - > rc = rc ;
) ,
TP_printk ( " unit_address=0x%016llx process_token=0x%llx "
" control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li " ,
__entry - > unit_address ,
__entry - > process_token ,
__entry - > control_mask ,
__entry - > reset_mask ,
__entry - > r4 ,
__entry - > rc
)
) ;
DEFINE_EVENT ( cxl_hcall_control , cxl_hcall_control_facility ,
TP_PROTO ( u64 unit_address , char * fct , u64 p1 , u64 p2 , u64 p3 ,
u64 p4 , unsigned long r4 , long rc ) ,
TP_ARGS ( unit_address , fct , p1 , p2 , p3 , p4 , r4 , rc )
) ;
TRACE_EVENT ( cxl_hcall_download_facility ,
TP_PROTO ( u64 unit_address , char * fct , u64 list_address , u64 num ,
unsigned long r4 , long rc ) ,
TP_ARGS ( unit_address , fct , list_address , num , r4 , rc ) ,
TP_STRUCT__entry (
__field ( u64 , unit_address )
__field ( char * , fct )
__field ( u64 , list_address )
__field ( u64 , num )
__field ( unsigned long , r4 )
__field ( long , rc )
) ,
TP_fast_assign (
__entry - > unit_address = unit_address ;
__entry - > fct = fct ;
__entry - > list_address = list_address ;
__entry - > num = num ;
__entry - > r4 = r4 ;
__entry - > rc = rc ;
) ,
TP_printk ( " %#.16llx, %s(%#llx, %#llx), %#lx): %li " ,
__entry - > unit_address ,
__entry - > fct ,
__entry - > list_address ,
__entry - > num ,
__entry - > r4 ,
__entry - > rc
)
) ;
2015-01-09 12:34:36 +03:00
# endif /* _CXL_TRACE_H */
/* This part must be outside protection */
# undef TRACE_INCLUDE_PATH
# define TRACE_INCLUDE_PATH .
# define TRACE_INCLUDE_FILE trace
# include <trace/define_trace.h>