xref: /openbmc/linux/include/trace/events/iommu.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
27f6db171SShuah Khan /*
37f6db171SShuah Khan  * iommu trace points
47f6db171SShuah Khan  *
57f6db171SShuah Khan  * Copyright (C) 2013 Shuah Khan <shuah.kh@samsung.com>
67f6db171SShuah Khan  *
77f6db171SShuah Khan  */
87f6db171SShuah Khan #undef TRACE_SYSTEM
97f6db171SShuah Khan #define TRACE_SYSTEM iommu
107f6db171SShuah Khan 
117f6db171SShuah Khan #if !defined(_TRACE_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
127f6db171SShuah Khan #define _TRACE_IOMMU_H
137f6db171SShuah Khan 
147f6db171SShuah Khan #include <linux/tracepoint.h>
157f6db171SShuah Khan 
167f6db171SShuah Khan struct device;
177f6db171SShuah Khan 
187f6db171SShuah Khan DECLARE_EVENT_CLASS(iommu_group_event,
197f6db171SShuah Khan 
207f6db171SShuah Khan 	TP_PROTO(int group_id, struct device *dev),
217f6db171SShuah Khan 
227f6db171SShuah Khan 	TP_ARGS(group_id, dev),
237f6db171SShuah Khan 
247f6db171SShuah Khan 	TP_STRUCT__entry(
257f6db171SShuah Khan 		__field(int, gid)
267f6db171SShuah Khan 		__string(device, dev_name(dev))
277f6db171SShuah Khan 	),
287f6db171SShuah Khan 
297f6db171SShuah Khan 	TP_fast_assign(
307f6db171SShuah Khan 		__entry->gid = group_id;
317f6db171SShuah Khan 		__assign_str(device, dev_name(dev));
327f6db171SShuah Khan 	),
337f6db171SShuah Khan 
347f6db171SShuah Khan 	TP_printk("IOMMU: groupID=%d device=%s",
357f6db171SShuah Khan 			__entry->gid, __get_str(device)
367f6db171SShuah Khan 	)
377f6db171SShuah Khan );
387f6db171SShuah Khan 
397f6db171SShuah Khan DEFINE_EVENT(iommu_group_event, add_device_to_group,
407f6db171SShuah Khan 
417f6db171SShuah Khan 	TP_PROTO(int group_id, struct device *dev),
427f6db171SShuah Khan 
437f6db171SShuah Khan 	TP_ARGS(group_id, dev)
447f6db171SShuah Khan 
457f6db171SShuah Khan );
467f6db171SShuah Khan 
477f6db171SShuah Khan DEFINE_EVENT(iommu_group_event, remove_device_from_group,
487f6db171SShuah Khan 
497f6db171SShuah Khan 	TP_PROTO(int group_id, struct device *dev),
507f6db171SShuah Khan 
517f6db171SShuah Khan 	TP_ARGS(group_id, dev)
527f6db171SShuah Khan );
537f6db171SShuah Khan 
547f6db171SShuah Khan DECLARE_EVENT_CLASS(iommu_device_event,
557f6db171SShuah Khan 
567f6db171SShuah Khan 	TP_PROTO(struct device *dev),
577f6db171SShuah Khan 
587f6db171SShuah Khan 	TP_ARGS(dev),
597f6db171SShuah Khan 
607f6db171SShuah Khan 	TP_STRUCT__entry(
617f6db171SShuah Khan 		__string(device, dev_name(dev))
627f6db171SShuah Khan 	),
637f6db171SShuah Khan 
647f6db171SShuah Khan 	TP_fast_assign(
657f6db171SShuah Khan 		__assign_str(device, dev_name(dev));
667f6db171SShuah Khan 	),
677f6db171SShuah Khan 
687f6db171SShuah Khan 	TP_printk("IOMMU: device=%s", __get_str(device)
697f6db171SShuah Khan 	)
707f6db171SShuah Khan );
717f6db171SShuah Khan 
727f6db171SShuah Khan DEFINE_EVENT(iommu_device_event, attach_device_to_domain,
737f6db171SShuah Khan 
747f6db171SShuah Khan 	TP_PROTO(struct device *dev),
757f6db171SShuah Khan 
767f6db171SShuah Khan 	TP_ARGS(dev)
777f6db171SShuah Khan );
787f6db171SShuah Khan 
79db8614d3SShuah Khan TRACE_EVENT(map,
807f6db171SShuah Khan 
817f6db171SShuah Khan 	TP_PROTO(unsigned long iova, phys_addr_t paddr, size_t size),
827f6db171SShuah Khan 
837f6db171SShuah Khan 	TP_ARGS(iova, paddr, size),
847f6db171SShuah Khan 
857f6db171SShuah Khan 	TP_STRUCT__entry(
867f6db171SShuah Khan 		__field(u64, iova)
877f6db171SShuah Khan 		__field(u64, paddr)
88db8614d3SShuah Khan 		__field(size_t, size)
897f6db171SShuah Khan 	),
907f6db171SShuah Khan 
917f6db171SShuah Khan 	TP_fast_assign(
927f6db171SShuah Khan 		__entry->iova = iova;
937f6db171SShuah Khan 		__entry->paddr = paddr;
947f6db171SShuah Khan 		__entry->size = size;
957f6db171SShuah Khan 	),
967f6db171SShuah Khan 
97*94aedac4SDafna Hirschfeld 	TP_printk("IOMMU: iova=0x%016llx - 0x%016llx paddr=0x%016llx size=%zu",
98*94aedac4SDafna Hirschfeld 		  __entry->iova, __entry->iova + __entry->size, __entry->paddr,
99*94aedac4SDafna Hirschfeld 		  __entry->size
1007f6db171SShuah Khan 	)
1017f6db171SShuah Khan );
1027f6db171SShuah Khan 
103db8614d3SShuah Khan TRACE_EVENT(unmap,
1047f6db171SShuah Khan 
105db8614d3SShuah Khan 	TP_PROTO(unsigned long iova, size_t size, size_t unmapped_size),
1067f6db171SShuah Khan 
107db8614d3SShuah Khan 	TP_ARGS(iova, size, unmapped_size),
1087f6db171SShuah Khan 
109db8614d3SShuah Khan 	TP_STRUCT__entry(
110db8614d3SShuah Khan 		__field(u64, iova)
111db8614d3SShuah Khan 		__field(size_t, size)
112db8614d3SShuah Khan 		__field(size_t, unmapped_size)
113db8614d3SShuah Khan 	),
1147f6db171SShuah Khan 
115db8614d3SShuah Khan 	TP_fast_assign(
116db8614d3SShuah Khan 		__entry->iova = iova;
117db8614d3SShuah Khan 		__entry->size = size;
118db8614d3SShuah Khan 		__entry->unmapped_size = unmapped_size;
119db8614d3SShuah Khan 	),
1207f6db171SShuah Khan 
121*94aedac4SDafna Hirschfeld 	TP_printk("IOMMU: iova=0x%016llx - 0x%016llx size=%zu unmapped_size=%zu",
122*94aedac4SDafna Hirschfeld 		  __entry->iova, __entry->iova + __entry->size,
123*94aedac4SDafna Hirschfeld 		  __entry->size, __entry->unmapped_size
1247f6db171SShuah Khan 	)
1257f6db171SShuah Khan );
12604fa2f7fSShuah Khan 
12704fa2f7fSShuah Khan DECLARE_EVENT_CLASS(iommu_error,
12804fa2f7fSShuah Khan 
12904fa2f7fSShuah Khan 	TP_PROTO(struct device *dev, unsigned long iova, int flags),
13004fa2f7fSShuah Khan 
13104fa2f7fSShuah Khan 	TP_ARGS(dev, iova, flags),
13204fa2f7fSShuah Khan 
13304fa2f7fSShuah Khan 	TP_STRUCT__entry(
13404fa2f7fSShuah Khan 		__string(device, dev_name(dev))
13504fa2f7fSShuah Khan 		__string(driver, dev_driver_string(dev))
13604fa2f7fSShuah Khan 		__field(u64, iova)
13704fa2f7fSShuah Khan 		__field(int, flags)
13804fa2f7fSShuah Khan 	),
13904fa2f7fSShuah Khan 
14004fa2f7fSShuah Khan 	TP_fast_assign(
14104fa2f7fSShuah Khan 		__assign_str(device, dev_name(dev));
14204fa2f7fSShuah Khan 		__assign_str(driver, dev_driver_string(dev));
14304fa2f7fSShuah Khan 		__entry->iova = iova;
14404fa2f7fSShuah Khan 		__entry->flags = flags;
14504fa2f7fSShuah Khan 	),
14604fa2f7fSShuah Khan 
14704fa2f7fSShuah Khan 	TP_printk("IOMMU:%s %s iova=0x%016llx flags=0x%04x",
14804fa2f7fSShuah Khan 			__get_str(driver), __get_str(device),
14904fa2f7fSShuah Khan 			__entry->iova, __entry->flags
15004fa2f7fSShuah Khan 	)
15104fa2f7fSShuah Khan );
15204fa2f7fSShuah Khan 
15304fa2f7fSShuah Khan DEFINE_EVENT(iommu_error, io_page_fault,
15404fa2f7fSShuah Khan 
15504fa2f7fSShuah Khan 	TP_PROTO(struct device *dev, unsigned long iova, int flags),
15604fa2f7fSShuah Khan 
15704fa2f7fSShuah Khan 	TP_ARGS(dev, iova, flags)
15804fa2f7fSShuah Khan );
1597f6db171SShuah Khan #endif /* _TRACE_IOMMU_H */
1607f6db171SShuah Khan 
1617f6db171SShuah Khan /* This part must be outside protection */
1627f6db171SShuah Khan #include <trace/define_trace.h>
163