diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7dc7311c9896..50ccc9040a89 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -96,6 +96,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_alloc_insert_iova); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_iovad_alloc_iova); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_iovad_free_iova); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_iovad_init_alloc_algo); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_limit_align_shift); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_allow_domain_state); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpuidle_psci_enter); diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index 4631436d55f3..1cf7d0fb3c8a 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -188,8 +188,11 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad, unsigned long align_mask = ~0UL; unsigned long high_pfn = limit_pfn, low_pfn = iovad->start_pfn; - if (size_aligned) - align_mask <<= fls_long(size - 1); + if (size_aligned) { + unsigned long shift = fls_long(size - 1); + trace_android_rvh_iommu_limit_align_shift(iovad, size, &shift); + align_mask <<= shift; + } /* Walk the tree backwards */ spin_lock_irqsave(&iovad->iova_rbtree_lock, flags); diff --git a/include/trace/hooks/iommu.h b/include/trace/hooks/iommu.h index ed02144539f9..d36446f0dd40 100644 --- a/include/trace/hooks/iommu.h +++ b/include/trace/hooks/iommu.h @@ -35,6 +35,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_iommu_iovad_init_alloc_algo, TP_PROTO(struct device *dev, struct iova_domain *iovad), TP_ARGS(dev, iovad), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_iommu_limit_align_shift, + TP_PROTO(struct iova_domain *iovad, unsigned long size, + unsigned long *shift), + TP_ARGS(iovad, size, shift), 1); + #endif /* _TRACE_HOOK_IOMMU_H */ /* This part must be outside protection */