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