iommu: Add iommu_error class event to iommu trace
authorShuah Khan <shuah.kh@samsung.com>
Tue, 24 Sep 2013 21:21:19 +0000 (15:21 -0600)
committerJoerg Roedel <joro@8bytes.org>
Wed, 25 Sep 2013 09:07:04 +0000 (11:07 +0200)
iommu_error class event can be enabled to trigger when an iommu
error occurs. This trace event is intended to be called to report the
error information. Trace information includes driver name, device name,
iova, and flags.

iommu_error:io_page_fault

Signed-off-by: Shuah Khan <shuah.kh@samsung.com>
Signed-off-by: Joerg Roedel <joro@8bytes.org>
drivers/iommu/iommu-traces.c
include/trace/events/iommu.h

index a2af60f318101378a3cff70884253205d09a9d3c..bf3b317ff0c1b2dd0e5b24eb780c09c360a0e15d 100644 (file)
@@ -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_error */
+EXPORT_TRACEPOINT_SYMBOL_GPL(io_page_fault);
index 86bcc5a9fedc75c5080003a2dddde6d2d810f6ad..a8f5c32d174b734aad34f1529933fa5addbd317c 100644 (file)
@@ -123,6 +123,39 @@ DEFINE_EVENT_PRINT(iommu_map_unmap, unmap,
                        __entry->iova, __entry->size
        )
 );
+
+DECLARE_EVENT_CLASS(iommu_error,
+
+       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_error, io_page_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 */