Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
2 : : /*
3 : : * iommu trace points
4 : : *
5 : : * Copyright (C) 2013 Shuah Khan <shuah.kh@samsung.com>
6 : : *
7 : : */
8 : : #undef TRACE_SYSTEM
9 : : #define TRACE_SYSTEM iommu
10 : :
11 : : #if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
12 : : #define _TRACE_IOMMU_H
13 : :
14 : : #include <linux/tracepoint.h>
15 : :
16 : : struct device;
17 : :
18 [ # # # # : 0 : DECLARE_EVENT_CLASS(iommu_group_event,
# # # # #
# ]
19 : :
20 : : TP_PROTO(int group_id, struct device *dev),
21 : :
22 : : TP_ARGS(group_id, dev),
23 : :
24 : : TP_STRUCT__entry(
25 : : __field(int, gid)
26 : : __string(device, dev_name(dev))
27 : : ),
28 : :
29 : : TP_fast_assign(
30 : : __entry->gid = group_id;
31 : : __assign_str(device, dev_name(dev));
32 : : ),
33 : :
34 : : TP_printk("IOMMU: groupID=%d device=%s",
35 : : __entry->gid, __get_str(device)
36 : : )
37 : : );
38 : :
39 [ # # # # : 0 : DEFINE_EVENT(iommu_group_event, add_device_to_group,
# # # # ]
40 : :
41 : : TP_PROTO(int group_id, struct device *dev),
42 : :
43 : : TP_ARGS(group_id, dev)
44 : :
45 : : );
46 : :
47 [ # # # # : 0 : DEFINE_EVENT(iommu_group_event, remove_device_from_group,
# # # # ]
48 : :
49 : : TP_PROTO(int group_id, struct device *dev),
50 : :
51 : : TP_ARGS(group_id, dev)
52 : : );
53 : :
54 [ # # # # : 0 : DECLARE_EVENT_CLASS(iommu_device_event,
# # # # #
# ]
55 : :
56 : : TP_PROTO(struct device *dev),
57 : :
58 : : TP_ARGS(dev),
59 : :
60 : : TP_STRUCT__entry(
61 : : __string(device, dev_name(dev))
62 : : ),
63 : :
64 : : TP_fast_assign(
65 : : __assign_str(device, dev_name(dev));
66 : : ),
67 : :
68 : : TP_printk("IOMMU: device=%s", __get_str(device)
69 : : )
70 : : );
71 : :
72 [ # # # # : 0 : DEFINE_EVENT(iommu_device_event, attach_device_to_domain,
# # # # ]
73 : :
74 : : TP_PROTO(struct device *dev),
75 : :
76 : : TP_ARGS(dev)
77 : : );
78 : :
79 [ # # # # : 0 : DEFINE_EVENT(iommu_device_event, detach_device_from_domain,
# # # # ]
80 : :
81 : : TP_PROTO(struct device *dev),
82 : :
83 : : TP_ARGS(dev)
84 : : );
85 : :
86 [ # # # # : 0 : TRACE_EVENT(map,
# # # # ]
87 : :
88 : : TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
89 : :
90 : : TP_ARGS(iova, paddr, size),
91 : :
92 : : TP_STRUCT__entry(
93 : : __field(u64, iova)
94 : : __field(u64, paddr)
95 : : __field(size_t, size)
96 : : ),
97 : :
98 : : TP_fast_assign(
99 : : __entry->iova = iova;
100 : : __entry->paddr = paddr;
101 : : __entry->size = size;
102 : : ),
103 : :
104 : : TP_printk("IOMMU: iova=0x%016llx paddr=0x%016llx size=%zu",
105 : : __entry->iova, __entry->paddr, __entry->size
106 : : )
107 : : );
108 : :
109 [ # # # # : 0 : TRACE_EVENT(unmap,
# # # # ]
110 : :
111 : : TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size),
112 : :
113 : : TP_ARGS(iova, size, unmapped_size),
114 : :
115 : : TP_STRUCT__entry(
116 : : __field(u64, iova)
117 : : __field(size_t, size)
118 : : __field(size_t, unmapped_size)
119 : : ),
120 : :
121 : : TP_fast_assign(
122 : : __entry->iova = iova;
123 : : __entry->size = size;
124 : : __entry->unmapped_size = unmapped_size;
125 : : ),
126 : :
127 : : TP_printk("IOMMU: iova=0x%016llx size=%zu unmapped_size=%zu",
128 : : __entry->iova, __entry->size, __entry->unmapped_size
129 : : )
130 : : );
131 : :
132 [ # # # # : 0 : DECLARE_EVENT_CLASS(iommu_error,
# # # # #
# # # ]
133 : :
134 : : TP_PROTO(struct device *dev, unsigned long iova, int flags),
135 : :
136 : : TP_ARGS(dev, iova, flags),
137 : :
138 : : TP_STRUCT__entry(
139 : : __string(device, dev_name(dev))
140 : : __string(driver, dev_driver_string(dev))
141 : : __field(u64, iova)
142 : : __field(int, flags)
143 : : ),
144 : :
145 : : TP_fast_assign(
146 : : __assign_str(device, dev_name(dev));
147 : : __assign_str(driver, dev_driver_string(dev));
148 : : __entry->iova = iova;
149 : : __entry->flags = flags;
150 : : ),
151 : :
152 : : TP_printk("IOMMU:%s %s iova=0x%016llx flags=0x%04x",
153 : : __get_str(driver), __get_str(device),
154 : : __entry->iova, __entry->flags
155 : : )
156 : : );
157 : :
158 [ # # # # : 0 : DEFINE_EVENT(iommu_error, io_page_fault,
# # # # ]
159 : :
160 : : TP_PROTO(struct device *dev, unsigned long iova, int flags),
161 : :
162 : : TP_ARGS(dev, iova, flags)
163 : : );
164 : : #endif /* _TRACE_IOMMU_H */
165 : :
166 : : /* This part must be outside protection */
167 : : #include <trace/define_trace.h>
|