* [PATCH 1/2] iommu: Add iommu_fault class event to iommu trace
2013-08-16 17:20 [PATCH 0/2] iommu: Add iommu_fault class event to iommu trace Shuah Khan
@ 2013-08-16 17:20 ` Shuah Khan
2013-09-24 10:48 ` Joerg Roedel
2013-08-16 17:20 ` [PATCH 2/2] iommu: Change iommu driver to call report_fault trace event Shuah Khan
1 sibling, 1 reply; 5+ messages in thread
From: Shuah Khan @ 2013-08-16 17:20 UTC (permalink / raw)
To: joro, alex.williamson, Varun.Sethi, udknight, aik, rostedt,
fweisbec, mingo
Cc: Shuah Khan, linux-kernel, iommu, shuahkhan
Add iommu_fault class event can be enabled to trigger when an iommu
fault occurs. This trace event is intended to be called to report the
fault information. Trace information includes driver name, device name,
iova, and flags.
iommu_fault:report_fault
Signed-off-by: Shuah Khan <shuah.kh@samsung.com>
---
drivers/iommu/iommu-traces.c | 3 +++
include/trace/events/iommu.h | 33 +++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/drivers/iommu/iommu-traces.c b/drivers/iommu/iommu-traces.c
index a2af60f..314aa93 100644
--- a/drivers/iommu/iommu-traces.c
+++ b/drivers/iommu/iommu-traces.c
@@ -22,3 +22,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(detach_device_from_domain);
/* iommu_map_unmap */
EXPORT_TRACEPOINT_SYMBOL_GPL(map);
EXPORT_TRACEPOINT_SYMBOL_GPL(unmap);
+
+/* iommu_fault */
+EXPORT_TRACEPOINT_SYMBOL_GPL(report_fault);
diff --git a/include/trace/events/iommu.h b/include/trace/events/iommu.h
index 86bcc5a..74847fb 100644
--- a/include/trace/events/iommu.h
+++ b/include/trace/events/iommu.h
@@ -123,6 +123,39 @@ DEFINE_EVENT_PRINT(iommu_map_unmap, unmap,
__entry->iova, __entry->size
)
);
+
+DECLARE_EVENT_CLASS(iommu_fault,
+
+ 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_fault, report_fault,
+
+ TP_PROTO(struct device *dev, unsigned long iova, int flags),
+
+ TP_ARGS(dev, iova, flags)
+);
#endif /* _TRACE_IOMMU_H */
/* This part must be outside protection */
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 2/2] iommu: Change iommu driver to call report_fault trace event
2013-08-16 17:20 [PATCH 0/2] iommu: Add iommu_fault class event to iommu trace Shuah Khan
2013-08-16 17:20 ` [PATCH 1/2] " Shuah Khan
@ 2013-08-16 17:20 ` Shuah Khan
1 sibling, 0 replies; 5+ messages in thread
From: Shuah Khan @ 2013-08-16 17:20 UTC (permalink / raw)
To: joro, alex.williamson, Varun.Sethi, udknight, aik, rostedt,
fweisbec, mingo
Cc: Shuah Khan, linux-kernel, iommu, shuahkhan
Change iommu driver report_iommu_fault() to call report_fault trace event.
This iommu_fault class event can be enabled to trigger when an iommu fault
occurs. Trace information includes driver name, device name, iova, and flags.
Testing:
Added trace calls to iommu_prepare_identity_map() for testing some of the
conditions that are hard to trigger. Here is the trace from the testing:
swapper/0-1 [003] .... 1.926331: report_fault: IOMMU:pci 0000:00:1d.0 iova=0x00000000cadc6000 flags=0x0001
Signed-off-by: Shuah Khan <shuah.kh@samsung.com>
---
include/linux/iommu.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 3aeb730..9d1c051 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -22,6 +22,7 @@
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/types.h>
+#include <trace/events/iommu.h>
#define IOMMU_READ (1)
#define IOMMU_WRITE (2)
@@ -211,6 +212,7 @@ static inline int report_iommu_fault(struct iommu_domain *domain,
ret = domain->handler(domain, dev, iova, flags,
domain->handler_token);
+ trace_report_fault(dev, iova, flags);
return ret;
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread