Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * iommu trace points
0004  *
0005  * Copyright (C) 2013 Shuah Khan <shuah.kh@samsung.com>
0006  *
0007  */
0008 #undef TRACE_SYSTEM
0009 #define TRACE_SYSTEM iommu
0010 
0011 #if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
0012 #define _TRACE_IOMMU_H
0013 
0014 #include <linux/tracepoint.h>
0015 
0016 struct device;
0017 
0018 DECLARE_EVENT_CLASS(iommu_group_event,
0019 
0020     TP_PROTO(int group_id, struct device *dev),
0021 
0022     TP_ARGS(group_id, dev),
0023 
0024     TP_STRUCT__entry(
0025         __field(int, gid)
0026         __string(device, dev_name(dev))
0027     ),
0028 
0029     TP_fast_assign(
0030         __entry->gid = group_id;
0031         __assign_str(device, dev_name(dev));
0032     ),
0033 
0034     TP_printk("IOMMU: groupID=%d device=%s",
0035             __entry->gid, __get_str(device)
0036     )
0037 );
0038 
0039 DEFINE_EVENT(iommu_group_event, add_device_to_group,
0040 
0041     TP_PROTO(int group_id, struct device *dev),
0042 
0043     TP_ARGS(group_id, dev)
0044 
0045 );
0046 
0047 DEFINE_EVENT(iommu_group_event, remove_device_from_group,
0048 
0049     TP_PROTO(int group_id, struct device *dev),
0050 
0051     TP_ARGS(group_id, dev)
0052 );
0053 
0054 DECLARE_EVENT_CLASS(iommu_device_event,
0055 
0056     TP_PROTO(struct device *dev),
0057 
0058     TP_ARGS(dev),
0059 
0060     TP_STRUCT__entry(
0061         __string(device, dev_name(dev))
0062     ),
0063 
0064     TP_fast_assign(
0065         __assign_str(device, dev_name(dev));
0066     ),
0067 
0068     TP_printk("IOMMU: device=%s", __get_str(device)
0069     )
0070 );
0071 
0072 DEFINE_EVENT(iommu_device_event, attach_device_to_domain,
0073 
0074     TP_PROTO(struct device *dev),
0075 
0076     TP_ARGS(dev)
0077 );
0078 
0079 DEFINE_EVENT(iommu_device_event, detach_device_from_domain,
0080 
0081     TP_PROTO(struct device *dev),
0082 
0083     TP_ARGS(dev)
0084 );
0085 
0086 TRACE_EVENT(map,
0087 
0088     TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
0089 
0090     TP_ARGS(iova, paddr, size),
0091 
0092     TP_STRUCT__entry(
0093         __field(u64, iova)
0094         __field(u64, paddr)
0095         __field(size_t, size)
0096     ),
0097 
0098     TP_fast_assign(
0099         __entry->iova = iova;
0100         __entry->paddr = paddr;
0101         __entry->size = size;
0102     ),
0103 
0104     TP_printk("IOMMU: iova=0x%016llx - 0x%016llx paddr=0x%016llx size=%zu",
0105           __entry->iova, __entry->iova + __entry->size, __entry->paddr,
0106           __entry->size
0107     )
0108 );
0109 
0110 TRACE_EVENT(unmap,
0111 
0112     TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size),
0113 
0114     TP_ARGS(iova, size, unmapped_size),
0115 
0116     TP_STRUCT__entry(
0117         __field(u64, iova)
0118         __field(size_t, size)
0119         __field(size_t, unmapped_size)
0120     ),
0121 
0122     TP_fast_assign(
0123         __entry->iova = iova;
0124         __entry->size = size;
0125         __entry->unmapped_size = unmapped_size;
0126     ),
0127 
0128     TP_printk("IOMMU: iova=0x%016llx - 0x%016llx size=%zu unmapped_size=%zu",
0129           __entry->iova, __entry->iova + __entry->size,
0130           __entry->size, __entry->unmapped_size
0131     )
0132 );
0133 
0134 DECLARE_EVENT_CLASS(iommu_error,
0135 
0136     TP_PROTO(struct device *dev, unsigned long iova, int flags),
0137 
0138     TP_ARGS(dev, iova, flags),
0139 
0140     TP_STRUCT__entry(
0141         __string(device, dev_name(dev))
0142         __string(driver, dev_driver_string(dev))
0143         __field(u64, iova)
0144         __field(int, flags)
0145     ),
0146 
0147     TP_fast_assign(
0148         __assign_str(device, dev_name(dev));
0149         __assign_str(driver, dev_driver_string(dev));
0150         __entry->iova = iova;
0151         __entry->flags = flags;
0152     ),
0153 
0154     TP_printk("IOMMU:%s %s iova=0x%016llx flags=0x%04x",
0155             __get_str(driver), __get_str(device),
0156             __entry->iova, __entry->flags
0157     )
0158 );
0159 
0160 DEFINE_EVENT(iommu_error, io_page_fault,
0161 
0162     TP_PROTO(struct device *dev, unsigned long iova, int flags),
0163 
0164     TP_ARGS(dev, iova, flags)
0165 );
0166 #endif /* _TRACE_IOMMU_H */
0167 
0168 /* This part must be outside protection */
0169 #include <trace/define_trace.h>