diff options
Diffstat (limited to 'drivers/iommu/intel/trace.h')
| -rw-r--r-- | drivers/iommu/intel/trace.h | 103 | 
1 files changed, 100 insertions, 3 deletions
diff --git a/drivers/iommu/intel/trace.h b/drivers/iommu/intel/trace.h index 93d96f93a89b..9defdae6ebae 100644 --- a/drivers/iommu/intel/trace.h +++ b/drivers/iommu/intel/trace.h @@ -32,7 +32,7 @@ TRACE_EVENT(qi_submit,  	),  	TP_fast_assign( -		__assign_str(iommu, iommu->name); +		__assign_str(iommu);  		__entry->qw0 = qw0;  		__entry->qw1 = qw1;  		__entry->qw2 = qw2; @@ -79,8 +79,8 @@ TRACE_EVENT(prq_report,  		__entry->dw2 = dw2;  		__entry->dw3 = dw3;  		__entry->seq = seq; -		__assign_str(iommu, iommu->name); -		__assign_str(dev, dev_name(dev)); +		__assign_str(iommu); +		__assign_str(dev);  	),  	TP_printk("%s/%s seq# %ld: %s", @@ -89,6 +89,103 @@ TRACE_EVENT(prq_report,  				      __entry->dw1, __entry->dw2, __entry->dw3)  	)  ); + +DECLARE_EVENT_CLASS(cache_tag_log, +	TP_PROTO(struct cache_tag *tag), +	TP_ARGS(tag), +	TP_STRUCT__entry( +		__string(iommu, tag->iommu->name) +		__string(dev, dev_name(tag->dev)) +		__field(u16, type) +		__field(u16, domain_id) +		__field(u32, pasid) +		__field(u32, users) +	), +	TP_fast_assign( +		__assign_str(iommu); +		__assign_str(dev); +		__entry->type = tag->type; +		__entry->domain_id = tag->domain_id; +		__entry->pasid = tag->pasid; +		__entry->users = tag->users; +	), +	TP_printk("%s/%s type %s did %d pasid %d ref %d", +		  __get_str(iommu), __get_str(dev), +		  __print_symbolic(__entry->type, +			{ CACHE_TAG_IOTLB,		"iotlb" }, +			{ CACHE_TAG_DEVTLB,		"devtlb" }, +			{ CACHE_TAG_NESTING_IOTLB,	"nesting_iotlb" }, +			{ CACHE_TAG_NESTING_DEVTLB,	"nesting_devtlb" }), +		__entry->domain_id, __entry->pasid, __entry->users +	) +); + +DEFINE_EVENT(cache_tag_log, cache_tag_assign, +	TP_PROTO(struct cache_tag *tag), +	TP_ARGS(tag) +); + +DEFINE_EVENT(cache_tag_log, cache_tag_unassign, +	TP_PROTO(struct cache_tag *tag), +	TP_ARGS(tag) +); + +DEFINE_EVENT(cache_tag_log, cache_tag_flush_all, +	TP_PROTO(struct cache_tag *tag), +	TP_ARGS(tag) +); + +DECLARE_EVENT_CLASS(cache_tag_flush, +	TP_PROTO(struct cache_tag *tag, unsigned long start, unsigned long end, +		 unsigned long addr, unsigned long pages, unsigned long mask), +	TP_ARGS(tag, start, end, addr, pages, mask), +	TP_STRUCT__entry( +		__string(iommu, tag->iommu->name) +		__string(dev, dev_name(tag->dev)) +		__field(u16, type) +		__field(u16, domain_id) +		__field(u32, pasid) +		__field(unsigned long, start) +		__field(unsigned long, end) +		__field(unsigned long, addr) +		__field(unsigned long, pages) +		__field(unsigned long, mask) +	), +	TP_fast_assign( +		__assign_str(iommu); +		__assign_str(dev); +		__entry->type = tag->type; +		__entry->domain_id = tag->domain_id; +		__entry->pasid = tag->pasid; +		__entry->start = start; +		__entry->end = end; +		__entry->addr = addr; +		__entry->pages = pages; +		__entry->mask = mask; +	), +	TP_printk("%s %s[%d] type %s did %d [0x%lx-0x%lx] addr 0x%lx pages 0x%lx mask 0x%lx", +		  __get_str(iommu), __get_str(dev), __entry->pasid, +		  __print_symbolic(__entry->type, +			{ CACHE_TAG_IOTLB,		"iotlb" }, +			{ CACHE_TAG_DEVTLB,		"devtlb" }, +			{ CACHE_TAG_NESTING_IOTLB,	"nesting_iotlb" }, +			{ CACHE_TAG_NESTING_DEVTLB,	"nesting_devtlb" }), +		__entry->domain_id, __entry->start, __entry->end, +		__entry->addr, __entry->pages, __entry->mask +	) +); + +DEFINE_EVENT(cache_tag_flush, cache_tag_flush_range, +	TP_PROTO(struct cache_tag *tag, unsigned long start, unsigned long end, +		 unsigned long addr, unsigned long pages, unsigned long mask), +	TP_ARGS(tag, start, end, addr, pages, mask) +); + +DEFINE_EVENT(cache_tag_flush, cache_tag_flush_range_np, +	TP_PROTO(struct cache_tag *tag, unsigned long start, unsigned long end, +		 unsigned long addr, unsigned long pages, unsigned long mask), +	TP_ARGS(tag, start, end, addr, pages, mask) +);  #endif /* _TRACE_INTEL_IOMMU_H */  /* This part must be outside protection */  |