2013-08-15 11:59:23 -06:00
/*
* iommu trace points
*
* Copyright ( C ) 2013 Shuah Khan < shuah . kh @ samsung . com >
*
*/
# undef TRACE_SYSTEM
# define TRACE_SYSTEM iommu
# if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
# define _TRACE_IOMMU_H
# include <linux/tracepoint.h>
# include <linux/pci.h>
struct device ;
DECLARE_EVENT_CLASS ( iommu_group_event ,
TP_PROTO ( int group_id , struct device * dev ) ,
TP_ARGS ( group_id , dev ) ,
TP_STRUCT__entry (
__field ( int , gid )
__string ( device , dev_name ( dev ) )
) ,
TP_fast_assign (
__entry - > gid = group_id ;
__assign_str ( device , dev_name ( dev ) ) ;
) ,
TP_printk ( " IOMMU: groupID=%d device=%s " ,
__entry - > gid , __get_str ( device )
)
) ;
DEFINE_EVENT ( iommu_group_event , add_device_to_group ,
TP_PROTO ( int group_id , struct device * dev ) ,
TP_ARGS ( group_id , dev )
) ;
DEFINE_EVENT ( iommu_group_event , remove_device_from_group ,
TP_PROTO ( int group_id , struct device * dev ) ,
TP_ARGS ( group_id , dev )
) ;
DECLARE_EVENT_CLASS ( iommu_device_event ,
TP_PROTO ( struct device * dev ) ,
TP_ARGS ( dev ) ,
TP_STRUCT__entry (
__string ( device , dev_name ( dev ) )
) ,
TP_fast_assign (
__assign_str ( device , dev_name ( dev ) ) ;
) ,
TP_printk ( " IOMMU: device=%s " , __get_str ( device )
)
) ;
DEFINE_EVENT ( iommu_device_event , attach_device_to_domain ,
TP_PROTO ( struct device * dev ) ,
TP_ARGS ( dev )
) ;
DEFINE_EVENT ( iommu_device_event , detach_device_from_domain ,
TP_PROTO ( struct device * dev ) ,
TP_ARGS ( dev )
) ;
DECLARE_EVENT_CLASS ( iommu_map_unmap ,
TP_PROTO ( unsigned long iova , phys_addr_t paddr , size_t size ) ,
TP_ARGS ( iova , paddr , size ) ,
TP_STRUCT__entry (
__field ( u64 , iova )
__field ( u64 , paddr )
__field ( int , size )
) ,
TP_fast_assign (
__entry - > iova = iova ;
__entry - > paddr = paddr ;
__entry - > size = size ;
) ,
TP_printk ( " IOMMU: iova=0x%016llx paddr=0x%016llx size=0x%x " ,
__entry - > iova , __entry - > paddr , __entry - > size
)
) ;
DEFINE_EVENT ( iommu_map_unmap , map ,
TP_PROTO ( unsigned long iova , phys_addr_t paddr , size_t size ) ,
TP_ARGS ( iova , paddr , size )
) ;
DEFINE_EVENT_PRINT ( iommu_map_unmap , unmap ,
TP_PROTO ( unsigned long iova , phys_addr_t paddr , size_t size ) ,
TP_ARGS ( iova , paddr , size ) ,
TP_printk ( " IOMMU: iova=0x%016llx size=0x%x " ,
__entry - > iova , __entry - > size
)
) ;
2013-09-24 15:21:19 -06:00
DECLARE_EVENT_CLASS ( iommu_error ,
TP_PROTO ( struct device * dev , unsigned long iova , int flags ) ,
TP_ARGS ( dev , iova , flags ) ,
TP_STRUCT__entry (
__string ( device , dev_name ( dev ) )
__string ( driver , dev_driver_string ( dev ) )
__field ( u64 , iova )
__field ( int , flags )
) ,
TP_fast_assign (
__assign_str ( device , dev_name ( dev ) ) ;
__assign_str ( driver , dev_driver_string ( dev ) ) ;
__entry - > iova = iova ;
__entry - > flags = flags ;
) ,
TP_printk ( " IOMMU:%s %s iova=0x%016llx flags=0x%04x " ,
__get_str ( driver ) , __get_str ( device ) ,
__entry - > iova , __entry - > flags
)
) ;
DEFINE_EVENT ( iommu_error , io_page_fault ,
TP_PROTO ( struct device * dev , unsigned long iova , int flags ) ,
TP_ARGS ( dev , iova , flags )
) ;
2013-08-15 11:59:23 -06:00
# endif /* _TRACE_IOMMU_H */
/* This part must be outside protection */
# include <trace/define_trace.h>