0001
0002
0003
0004
0005
0006
0007
0008 #undef TRACE_SYSTEM
0009 #define TRACE_SYSTEM iommu
0010
0011 #if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
0012 #define _TRACE_IOMMU_H
0013
0014 #include <linux/tracepoint.h>
0015
0016 struct device;
0017
0018 DECLARE_EVENT_CLASS(iommu_group_event,
0019
0020 TP_PROTO(int group_id, struct device *dev),
0021
0022 TP_ARGS(group_id, dev),
0023
0024 TP_STRUCT__entry(
0025 __field(int, gid)
0026 __string(device, dev_name(dev))
0027 ),
0028
0029 TP_fast_assign(
0030 __entry->gid = group_id;
0031 __assign_str(device, dev_name(dev));
0032 ),
0033
0034 TP_printk("IOMMU: groupID=%d device=%s",
0035 __entry->gid, __get_str(device)
0036 )
0037 );
0038
0039 DEFINE_EVENT(iommu_group_event, add_device_to_group,
0040
0041 TP_PROTO(int group_id, struct device *dev),
0042
0043 TP_ARGS(group_id, dev)
0044
0045 );
0046
0047 DEFINE_EVENT(iommu_group_event, remove_device_from_group,
0048
0049 TP_PROTO(int group_id, struct device *dev),
0050
0051 TP_ARGS(group_id, dev)
0052 );
0053
0054 DECLARE_EVENT_CLASS(iommu_device_event,
0055
0056 TP_PROTO(struct device *dev),
0057
0058 TP_ARGS(dev),
0059
0060 TP_STRUCT__entry(
0061 __string(device, dev_name(dev))
0062 ),
0063
0064 TP_fast_assign(
0065 __assign_str(device, dev_name(dev));
0066 ),
0067
0068 TP_printk("IOMMU: device=%s", __get_str(device)
0069 )
0070 );
0071
0072 DEFINE_EVENT(iommu_device_event, attach_device_to_domain,
0073
0074 TP_PROTO(struct device *dev),
0075
0076 TP_ARGS(dev)
0077 );
0078
0079 DEFINE_EVENT(iommu_device_event, detach_device_from_domain,
0080
0081 TP_PROTO(struct device *dev),
0082
0083 TP_ARGS(dev)
0084 );
0085
0086 TRACE_EVENT(map,
0087
0088 TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
0089
0090 TP_ARGS(iova, paddr, size),
0091
0092 TP_STRUCT__entry(
0093 __field(u64, iova)
0094 __field(u64, paddr)
0095 __field(size_t, size)
0096 ),
0097
0098 TP_fast_assign(
0099 __entry->iova = iova;
0100 __entry->paddr = paddr;
0101 __entry->size = size;
0102 ),
0103
0104 TP_printk("IOMMU: iova=0x%016llx - 0x%016llx paddr=0x%016llx size=%zu",
0105 __entry->iova, __entry->iova + __entry->size, __entry->paddr,
0106 __entry->size
0107 )
0108 );
0109
0110 TRACE_EVENT(unmap,
0111
0112 TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size),
0113
0114 TP_ARGS(iova, size, unmapped_size),
0115
0116 TP_STRUCT__entry(
0117 __field(u64, iova)
0118 __field(size_t, size)
0119 __field(size_t, unmapped_size)
0120 ),
0121
0122 TP_fast_assign(
0123 __entry->iova = iova;
0124 __entry->size = size;
0125 __entry->unmapped_size = unmapped_size;
0126 ),
0127
0128 TP_printk("IOMMU: iova=0x%016llx - 0x%016llx size=%zu unmapped_size=%zu",
0129 __entry->iova, __entry->iova + __entry->size,
0130 __entry->size, __entry->unmapped_size
0131 )
0132 );
0133
0134 DECLARE_EVENT_CLASS(iommu_error,
0135
0136 TP_PROTO(struct device *dev, unsigned long iova, int flags),
0137
0138 TP_ARGS(dev, iova, flags),
0139
0140 TP_STRUCT__entry(
0141 __string(device, dev_name(dev))
0142 __string(driver, dev_driver_string(dev))
0143 __field(u64, iova)
0144 __field(int, flags)
0145 ),
0146
0147 TP_fast_assign(
0148 __assign_str(device, dev_name(dev));
0149 __assign_str(driver, dev_driver_string(dev));
0150 __entry->iova = iova;
0151 __entry->flags = flags;
0152 ),
0153
0154 TP_printk("IOMMU:%s %s iova=0x%016llx flags=0x%04x",
0155 __get_str(driver), __get_str(device),
0156 __entry->iova, __entry->flags
0157 )
0158 );
0159
0160 DEFINE_EVENT(iommu_error, io_page_fault,
0161
0162 TP_PROTO(struct device *dev, unsigned long iova, int flags),
0163
0164 TP_ARGS(dev, iova, flags)
0165 );
0166 #endif
0167
0168
0169 #include <trace/define_trace.h>