aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/iommu/Makefile1
-rw-r--r--drivers/iommu/iommu-traces.c24
-rw-r--r--drivers/iommu/iommu.c1
-rw-r--r--include/trace/events/iommu.h129
4 files changed, 155 insertions, 0 deletions
diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index 14c1f474cf11..5d58bf16e9e3 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -1,4 +1,5 @@
1obj-$(CONFIG_IOMMU_API) += iommu.o 1obj-$(CONFIG_IOMMU_API) += iommu.o
2obj-$(CONFIG_IOMMU_API) += iommu-traces.o
2obj-$(CONFIG_OF_IOMMU) += of_iommu.o 3obj-$(CONFIG_OF_IOMMU) += of_iommu.o
3obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o msm_iommu_dev.o 4obj-$(CONFIG_MSM_IOMMU) += msm_iommu.o msm_iommu_dev.o
4obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o 5obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o
diff --git a/drivers/iommu/iommu-traces.c b/drivers/iommu/iommu-traces.c
new file mode 100644
index 000000000000..a2af60f31810
--- /dev/null
+++ b/drivers/iommu/iommu-traces.c
@@ -0,0 +1,24 @@
1/*
2 * iommu trace points
3 *
4 * Copyright (C) 2013 Shuah Khan <shuah.kh@samsung.com>
5 *
6 */
7
8#include <linux/string.h>
9#include <linux/types.h>
10
11#define CREATE_TRACE_POINTS
12#include <trace/events/iommu.h>
13
14/* iommu_group_event */
15EXPORT_TRACEPOINT_SYMBOL_GPL(add_device_to_group);
16EXPORT_TRACEPOINT_SYMBOL_GPL(remove_device_from_group);
17
18/* iommu_device_event */
19EXPORT_TRACEPOINT_SYMBOL_GPL(attach_device_to_domain);
20EXPORT_TRACEPOINT_SYMBOL_GPL(detach_device_from_domain);
21
22/* iommu_map_unmap */
23EXPORT_TRACEPOINT_SYMBOL_GPL(map);
24EXPORT_TRACEPOINT_SYMBOL_GPL(unmap);
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index fbe9ca734f8f..58f6a16b2e1a 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -29,6 +29,7 @@
29#include <linux/idr.h> 29#include <linux/idr.h>
30#include <linux/notifier.h> 30#include <linux/notifier.h>
31#include <linux/err.h> 31#include <linux/err.h>
32#include <trace/events/iommu.h>
32 33
33static struct kset *iommu_group_kset; 34static struct kset *iommu_group_kset;
34static struct ida iommu_group_ida; 35static struct ida iommu_group_ida;
diff --git a/include/trace/events/iommu.h b/include/trace/events/iommu.h
new file mode 100644
index 000000000000..86bcc5a9fedc
--- /dev/null
+++ b/include/trace/events/iommu.h
@@ -0,0 +1,129 @@
1/*
2 * iommu trace points
3 *
4 * Copyright (C) 2013 Shuah Khan <shuah.kh@samsung.com>
5 *
6 */
7#undef TRACE_SYSTEM
8#define TRACE_SYSTEM iommu
9
10#if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
11#define _TRACE_IOMMU_H
12
13#include <linux/tracepoint.h>
14#include <linux/pci.h>
15
16struct device;
17
18DECLARE_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
39DEFINE_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
47DEFINE_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
54DECLARE_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
72DEFINE_EVENT(iommu_device_event, attach_device_to_domain,
73
74 TP_PROTO(struct device *dev),
75
76 TP_ARGS(dev)
77);
78
79DEFINE_EVENT(iommu_device_event, detach_device_from_domain,
80
81 TP_PROTO(struct device *dev),
82
83 TP_ARGS(dev)
84);
85
86DECLARE_EVENT_CLASS(iommu_map_unmap,
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(int, 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=0x%x",
105 __entry->iova, __entry->paddr, __entry->size
106 )
107);
108
109DEFINE_EVENT(iommu_map_unmap, map,
110
111 TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
112
113 TP_ARGS(iova, paddr, size)
114);
115
116DEFINE_EVENT_PRINT(iommu_map_unmap, unmap,
117
118 TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
119
120 TP_ARGS(iova, paddr, size),
121
122 TP_printk("IOMMU: iova=0x%016llx size=0x%x",
123 __entry->iova, __entry->size
124 )
125);
126#endif /* _TRACE_IOMMU_H */
127
128/* This part must be outside protection */
129#include <trace/define_trace.h>