| 
									
										
										
										
											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>
 |