summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iommu/Makefile1
-rw-r--r--drivers/iommu/intel-iommu.c13
-rw-r--r--drivers/iommu/intel-trace.c14
3 files changed, 25 insertions, 3 deletions
diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index f13f36ae1af6..bfe27b2755bd 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -17,6 +17,7 @@ obj-$(CONFIG_ARM_SMMU) += arm-smmu.o
17obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o 17obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
18obj-$(CONFIG_DMAR_TABLE) += dmar.o 18obj-$(CONFIG_DMAR_TABLE) += dmar.o
19obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o 19obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o
20obj-$(CONFIG_INTEL_IOMMU) += intel-trace.o
20obj-$(CONFIG_INTEL_IOMMU_DEBUGFS) += intel-iommu-debugfs.o 21obj-$(CONFIG_INTEL_IOMMU_DEBUGFS) += intel-iommu-debugfs.o
21obj-$(CONFIG_INTEL_IOMMU_SVM) += intel-svm.o 22obj-$(CONFIG_INTEL_IOMMU_SVM) += intel-svm.o
22obj-$(CONFIG_IPMMU_VMSA) += ipmmu-vmsa.o 23obj-$(CONFIG_IPMMU_VMSA) += ipmmu-vmsa.o
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 0af7b4669264..12831beead02 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -3512,6 +3512,9 @@ static dma_addr_t __intel_map_single(struct device *dev, phys_addr_t paddr,
3512 3512
3513 start_paddr = (phys_addr_t)iova_pfn << PAGE_SHIFT; 3513 start_paddr = (phys_addr_t)iova_pfn << PAGE_SHIFT;
3514 start_paddr += paddr & ~PAGE_MASK; 3514 start_paddr += paddr & ~PAGE_MASK;
3515
3516 trace_map_single(dev, start_paddr, paddr, size << VTD_PAGE_SHIFT);
3517
3515 return start_paddr; 3518 return start_paddr;
3516 3519
3517error: 3520error:
@@ -3567,10 +3570,7 @@ static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size)
3567 if (dev_is_pci(dev)) 3570 if (dev_is_pci(dev))
3568 pdev = to_pci_dev(dev); 3571 pdev = to_pci_dev(dev);
3569 3572
3570 dev_dbg(dev, "Device unmapping: pfn %lx-%lx\n", start_pfn, last_pfn);
3571
3572 freelist = domain_unmap(domain, start_pfn, last_pfn); 3573 freelist = domain_unmap(domain, start_pfn, last_pfn);
3573
3574 if (intel_iommu_strict || (pdev && pdev->untrusted) || 3574 if (intel_iommu_strict || (pdev && pdev->untrusted) ||
3575 !has_iova_flush_queue(&domain->iovad)) { 3575 !has_iova_flush_queue(&domain->iovad)) {
3576 iommu_flush_iotlb_psi(iommu, domain, start_pfn, 3576 iommu_flush_iotlb_psi(iommu, domain, start_pfn,
@@ -3586,6 +3586,8 @@ static void intel_unmap(struct device *dev, dma_addr_t dev_addr, size_t size)
3586 * cpu used up by the iotlb flush operation... 3586 * cpu used up by the iotlb flush operation...
3587 */ 3587 */
3588 } 3588 }
3589
3590 trace_unmap_single(dev, dev_addr, size);
3589} 3591}
3590 3592
3591static void intel_unmap_page(struct device *dev, dma_addr_t dev_addr, 3593static void intel_unmap_page(struct device *dev, dma_addr_t dev_addr,
@@ -3676,6 +3678,8 @@ static void intel_unmap_sg(struct device *dev, struct scatterlist *sglist,
3676 } 3678 }
3677 3679
3678 intel_unmap(dev, startaddr, nrpages << VTD_PAGE_SHIFT); 3680 intel_unmap(dev, startaddr, nrpages << VTD_PAGE_SHIFT);
3681
3682 trace_unmap_sg(dev, startaddr, nrpages << VTD_PAGE_SHIFT);
3679} 3683}
3680 3684
3681static int intel_map_sg(struct device *dev, struct scatterlist *sglist, int nelems, 3685static int intel_map_sg(struct device *dev, struct scatterlist *sglist, int nelems,
@@ -3732,6 +3736,9 @@ static int intel_map_sg(struct device *dev, struct scatterlist *sglist, int nele
3732 return 0; 3736 return 0;
3733 } 3737 }
3734 3738
3739 trace_map_sg(dev, iova_pfn << PAGE_SHIFT,
3740 sg_phys(sglist), size << VTD_PAGE_SHIFT);
3741
3735 return nelems; 3742 return nelems;
3736} 3743}
3737 3744
diff --git a/drivers/iommu/intel-trace.c b/drivers/iommu/intel-trace.c
new file mode 100644
index 000000000000..bfb6a6e37a88
--- /dev/null
+++ b/drivers/iommu/intel-trace.c
@@ -0,0 +1,14 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Intel IOMMU trace support
4 *
5 * Copyright (C) 2019 Intel Corporation
6 *
7 * Author: Lu Baolu <baolu.lu@linux.intel.com>
8 */
9
10#include <linux/string.h>
11#include <linux/types.h>
12
13#define CREATE_TRACE_POINTS
14#include <trace/events/intel_iommu.h>