4f1ab4600a
This scope of this driver's lock usage is extremely wide, leading to excessively long lock hold times. Additionally, there is lots of excessive linked-list traversal and unnecessary dynamic memory allocation in a critical path, causing poor performance across the board. Fix all of this by greatly reducing the scope of the locks used and by significantly reducing the amount of operations performed when msm_dma_map_sg_attrs() is called. The entire driver's code is overhauled for better cleanliness and performance. Note that ION must be modified to pass a known structure via the private dma_buf pointer, so that the IOMMU driver can prevent races when operating on the same buffer concurrently. This is the only way to eliminate said buffer races without hurting the IOMMU driver's performance. Some additional members are added to the device struct as well to make these various performance improvements possible. This also removes the manual cache maintenance since ION already handles it. Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com> |
||
---|---|---|
.. | ||
amd_iommu_debugfs.c | ||
amd_iommu_init.c | ||
amd_iommu_proto.h | ||
amd_iommu_quirks.c | ||
amd_iommu_types.h | ||
amd_iommu_v2.c | ||
amd_iommu.c | ||
amd_iommu.h | ||
arm-smmu-debug.c | ||
arm-smmu-debug.h | ||
arm-smmu-regs.h | ||
arm-smmu-v3.c | ||
arm-smmu.c | ||
dma-iommu.c | ||
dma-mapping-fast.c | ||
dmar.c | ||
exynos-iommu.c | ||
fsl_pamu_domain.c | ||
fsl_pamu_domain.h | ||
fsl_pamu.c | ||
fsl_pamu.h | ||
intel_irq_remapping.c | ||
intel-iommu.c | ||
intel-pasid.c | ||
intel-pasid.h | ||
intel-svm.c | ||
io-pgtable-arm-v7s.c | ||
io-pgtable-arm.c | ||
io-pgtable-fast.c | ||
io-pgtable-msm-secure.c | ||
io-pgtable.c | ||
iommu-debug.c | ||
iommu-debugfs.c | ||
iommu-logger.c | ||
iommu-logger.h | ||
iommu-sysfs.c | ||
iommu-traces.c | ||
iommu.c | ||
iova.c | ||
ipmmu-vmsa.c | ||
irq_remapping.c | ||
irq_remapping.h | ||
Kconfig | ||
Makefile | ||
msm_dma_iommu_mapping.c | ||
msm_iommu_hw-8xxx.h | ||
msm_iommu.c | ||
msm_iommu.h | ||
mtk_iommu_v1.c | ||
mtk_iommu.c | ||
mtk_iommu.h | ||
of_iommu.c | ||
omap-iommu-debug.c | ||
omap-iommu.c | ||
omap-iommu.h | ||
omap-iopgtable.h | ||
qcom_iommu.c | ||
rockchip-iommu.c | ||
s390-iommu.c | ||
tegra-gart.c | ||
tegra-smmu.c |