diff --git a/drivers/iommu/iommu-sysfs.c b/drivers/iommu/iommu-sysfs.c index 36d1a7ce7fc4..6cc4fd12da93 100644 --- a/drivers/iommu/iommu-sysfs.c +++ b/drivers/iommu/iommu-sysfs.c @@ -90,6 +90,7 @@ error: put_device(iommu->dev); return ret; } +EXPORT_SYMBOL_GPL(iommu_device_sysfs_add); void iommu_device_sysfs_remove(struct iommu_device *iommu) { @@ -122,6 +123,7 @@ int iommu_device_link(struct iommu_device *iommu, struct device *link) return ret; } +EXPORT_SYMBOL_GPL(iommu_device_link); void iommu_device_unlink(struct iommu_device *iommu, struct device *link) { @@ -131,3 +133,4 @@ void iommu_device_unlink(struct iommu_device *iommu, struct device *link) sysfs_remove_link(&link->kobj, "iommu"); sysfs_remove_link_from_group(&iommu->dev->kobj, "devices", dev_name(link)); } +EXPORT_SYMBOL_GPL(iommu_device_unlink); diff --git a/drivers/iommu/iommu-traces.c b/drivers/iommu/iommu-traces.c index 1e9ca7789de1..6522accf223d 100644 --- a/drivers/iommu/iommu-traces.c +++ b/drivers/iommu/iommu-traces.c @@ -26,3 +26,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(unmap); /* iommu_error */ EXPORT_TRACEPOINT_SYMBOL_GPL(io_page_fault); +EXPORT_TRACEPOINT_SYMBOL_GPL(smmu_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(tlbi_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(tlbi_start); +EXPORT_TRACEPOINT_SYMBOL_GPL(tlbsync_timeout); diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 00e1c908cd8e..4a5cf9c4f4ba 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -100,6 +100,7 @@ int iommu_device_register(struct iommu_device *iommu) return 0; } +EXPORT_SYMBOL_GPL(iommu_device_register); void iommu_device_unregister(struct iommu_device *iommu) { @@ -786,6 +787,7 @@ struct iommu_group *iommu_group_ref_get(struct iommu_group *group) kobject_get(group->devices_kobj); return group; } +EXPORT_SYMBOL_GPL(iommu_group_ref_get); /** * iommu_group_put - Decrement group reference @@ -959,6 +961,7 @@ struct iommu_group *generic_device_group(struct device *dev) { return iommu_group_alloc(); } +EXPORT_SYMBOL_GPL(generic_device_group); /* * Use standard PCI bus topology, isolation features, and DMA alias quirks @@ -1026,6 +1029,7 @@ struct iommu_group *pci_device_group(struct device *dev) /* No shared group found, allocate new */ return iommu_group_alloc(); } +EXPORT_SYMBOL_GPL(pci_device_group); /** * iommu_group_get_for_dev - Find or create the IOMMU group for a device @@ -1085,6 +1089,7 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev) return group; } +EXPORT_SYMBOL_GPL(iommu_group_get_for_dev); struct iommu_domain *iommu_group_default_domain(struct iommu_group *group) { @@ -1891,6 +1896,7 @@ struct iommu_resv_region *iommu_alloc_resv_region(phys_addr_t start, region->type = type; return region; } +EXPORT_SYMBOL_GPL(iommu_alloc_resv_region); /* Request that a device is direct mapped by the IOMMU */ int iommu_request_dm_for_dev(struct device *dev) diff --git a/drivers/of/base.c b/drivers/of/base.c index f0dbb7ad88cf..b28dee2d2cc6 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1342,6 +1342,7 @@ int of_phandle_iterator_args(struct of_phandle_iterator *it, return count; } +EXPORT_SYMBOL_GPL(of_phandle_iterator_args); static int __of_parse_phandle_with_args(const struct device_node *np, const char *list_name, diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 57a87a001b4f..8aabd2317fc9 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3061,6 +3061,7 @@ void pci_request_acs(void) { pci_acs_enable = 1; } +EXPORT_SYMBOL_GPL(pci_request_acs); static const char *disable_acs_redir_param; diff --git a/drivers/pci/search.c b/drivers/pci/search.c index 2b5f720862d3..cf9ede9d89fa 100644 --- a/drivers/pci/search.c +++ b/drivers/pci/search.c @@ -111,6 +111,7 @@ int pci_for_each_dma_alias(struct pci_dev *pdev, return ret; } +EXPORT_SYMBOL_GPL(pci_for_each_dma_alias); static struct pci_bus *pci_do_find_bus(struct pci_bus *bus, unsigned char busnr) { diff --git a/include/trace/events/iommu.h b/include/trace/events/iommu.h index 72b4582322ff..270875a9dfaa 100644 --- a/include/trace/events/iommu.h +++ b/include/trace/events/iommu.h @@ -161,6 +161,66 @@ DEFINE_EVENT(iommu_error, io_page_fault, TP_ARGS(dev, iova, flags) ); + +DECLARE_EVENT_CLASS(iommu_tlbi, + + TP_PROTO(struct device *dev, u64 time), + + TP_ARGS(dev, time), + + TP_STRUCT__entry( + __string(device, dev_name(dev)) + __field(u64, time) + ), + + TP_fast_assign( + __assign_str(device, dev_name(dev)); + __entry->time = time; + ), + + TP_printk("IOMMU:%s %lld us", + __get_str(device), __entry->time + ) +); + +DEFINE_EVENT(iommu_tlbi, tlbi_start, + + TP_PROTO(struct device *dev, u64 time), + + TP_ARGS(dev, time) +); + +DEFINE_EVENT(iommu_tlbi, tlbi_end, + + TP_PROTO(struct device *dev, u64 time), + + TP_ARGS(dev, time) +); + +DEFINE_EVENT(iommu_tlbi, tlbsync_timeout, + + TP_PROTO(struct device *dev, u64 time), + + TP_ARGS(dev, time) +); + +TRACE_EVENT(smmu_init, + + TP_PROTO(u64 time), + + TP_ARGS(time), + + TP_STRUCT__entry( + __field(u64, time) + ), + + TP_fast_assign( + __entry->time = time; + ), + + TP_printk("ARM SMMU init latency: %lld us", __entry->time) +); + #endif /* _TRACE_IOMMU_H */ /* This part must be outside protection */