Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
7f6db171 SK |
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> | |
7f6db171 SK |
15 | |
16 | struct device; | |
17 | ||
18 | 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; | |
2c92ca84 | 31 | __assign_str(device); |
7f6db171 SK |
32 | ), |
33 | ||
34 | TP_printk("IOMMU: groupID=%d device=%s", | |
35 | __entry->gid, __get_str(device) | |
36 | ) | |
37 | ); | |
38 | ||
39 | 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 | 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 | 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( | |
2c92ca84 | 65 | __assign_str(device); |
7f6db171 SK |
66 | ), |
67 | ||
68 | TP_printk("IOMMU: device=%s", __get_str(device) | |
69 | ) | |
70 | ); | |
71 | ||
72 | DEFINE_EVENT(iommu_device_event, attach_device_to_domain, | |
73 | ||
74 | TP_PROTO(struct device *dev), | |
75 | ||
76 | TP_ARGS(dev) | |
77 | ); | |
78 | ||
db8614d3 | 79 | TRACE_EVENT(map, |
7f6db171 SK |
80 | |
81 | TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size), | |
82 | ||
83 | TP_ARGS(iova, paddr, size), | |
84 | ||
85 | TP_STRUCT__entry( | |
86 | __field(u64, iova) | |
87 | __field(u64, paddr) | |
db8614d3 | 88 | __field(size_t, size) |
7f6db171 SK |
89 | ), |
90 | ||
91 | TP_fast_assign( | |
92 | __entry->iova = iova; | |
93 | __entry->paddr = paddr; | |
94 | __entry->size = size; | |
95 | ), | |
96 | ||
94aedac4 DH |
97 | TP_printk("IOMMU: iova=0x%016llx - 0x%016llx paddr=0x%016llx size=%zu", |
98 | __entry->iova, __entry->iova + __entry->size, __entry->paddr, | |
99 | __entry->size | |
7f6db171 SK |
100 | ) |
101 | ); | |
102 | ||
db8614d3 | 103 | TRACE_EVENT(unmap, |
7f6db171 | 104 | |
db8614d3 | 105 | TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size), |
7f6db171 | 106 | |
db8614d3 | 107 | TP_ARGS(iova, size, unmapped_size), |
7f6db171 | 108 | |
db8614d3 SK |
109 | TP_STRUCT__entry( |
110 | __field(u64, iova) | |
111 | __field(size_t, size) | |
112 | __field(size_t, unmapped_size) | |
113 | ), | |
7f6db171 | 114 | |
db8614d3 SK |
115 | TP_fast_assign( |
116 | __entry->iova = iova; | |
117 | __entry->size = size; | |
118 | __entry->unmapped_size = unmapped_size; | |
119 | ), | |
7f6db171 | 120 | |
94aedac4 DH |
121 | TP_printk("IOMMU: iova=0x%016llx - 0x%016llx size=%zu unmapped_size=%zu", |
122 | __entry->iova, __entry->iova + __entry->size, | |
123 | __entry->size, __entry->unmapped_size | |
7f6db171 SK |
124 | ) |
125 | ); | |
04fa2f7f SK |
126 | |
127 | DECLARE_EVENT_CLASS(iommu_error, | |
128 | ||
129 | TP_PROTO(struct device *dev, unsigned long iova, int flags), | |
130 | ||
131 | TP_ARGS(dev, iova, flags), | |
132 | ||
133 | TP_STRUCT__entry( | |
134 | __string(device, dev_name(dev)) | |
135 | __string(driver, dev_driver_string(dev)) | |
136 | __field(u64, iova) | |
137 | __field(int, flags) | |
138 | ), | |
139 | ||
140 | TP_fast_assign( | |
2c92ca84 SRG |
141 | __assign_str(device); |
142 | __assign_str(driver); | |
04fa2f7f SK |
143 | __entry->iova = iova; |
144 | __entry->flags = flags; | |
145 | ), | |
146 | ||
147 | TP_printk("IOMMU:%s %s iova=0x%016llx flags=0x%04x", | |
148 | __get_str(driver), __get_str(device), | |
149 | __entry->iova, __entry->flags | |
150 | ) | |
151 | ); | |
152 | ||
153 | DEFINE_EVENT(iommu_error, io_page_fault, | |
154 | ||
155 | TP_PROTO(struct device *dev, unsigned long iova, int flags), | |
156 | ||
157 | TP_ARGS(dev, iova, flags) | |
158 | ); | |
7f6db171 SK |
159 | #endif /* _TRACE_IOMMU_H */ |
160 | ||
161 | /* This part must be outside protection */ | |
162 | #include <trace/define_trace.h> |