Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5774f7c5 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

AMD IOMMU: add statistics about allocated io memory



Impact: see amount of allocated io memory in debugfs

Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent 18811f55
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -74,6 +74,7 @@ DECLARE_STATS_COUNTER(cnt_free_coherent);
DECLARE_STATS_COUNTER(cross_page);
DECLARE_STATS_COUNTER(cross_page);
DECLARE_STATS_COUNTER(domain_flush_single);
DECLARE_STATS_COUNTER(domain_flush_single);
DECLARE_STATS_COUNTER(domain_flush_all);
DECLARE_STATS_COUNTER(domain_flush_all);
DECLARE_STATS_COUNTER(alloced_io_mem);


static struct dentry *stats_dir;
static struct dentry *stats_dir;
static struct dentry *de_isolate;
static struct dentry *de_isolate;
@@ -110,6 +111,7 @@ static void amd_iommu_stats_init(void)
	amd_iommu_stats_add(&cross_page);
	amd_iommu_stats_add(&cross_page);
	amd_iommu_stats_add(&domain_flush_single);
	amd_iommu_stats_add(&domain_flush_single);
	amd_iommu_stats_add(&domain_flush_all);
	amd_iommu_stats_add(&domain_flush_all);
	amd_iommu_stats_add(&alloced_io_mem);
}
}


#endif
#endif
@@ -1246,6 +1248,8 @@ static dma_addr_t __map_single(struct device *dev,
	}
	}
	address += offset;
	address += offset;


	ADD_STATS_COUNTER(alloced_io_mem, size);

	if (unlikely(dma_dom->need_flush && !amd_iommu_unmap_flush)) {
	if (unlikely(dma_dom->need_flush && !amd_iommu_unmap_flush)) {
		iommu_flush_tlb(iommu, dma_dom->domain.id);
		iommu_flush_tlb(iommu, dma_dom->domain.id);
		dma_dom->need_flush = false;
		dma_dom->need_flush = false;
@@ -1282,6 +1286,8 @@ static void __unmap_single(struct amd_iommu *iommu,
		start += PAGE_SIZE;
		start += PAGE_SIZE;
	}
	}


	SUB_STATS_COUNTER(alloced_io_mem, size);

	dma_ops_free_addresses(dma_dom, dma_addr, pages);
	dma_ops_free_addresses(dma_dom, dma_addr, pages);


	if (amd_iommu_unmap_flush || dma_dom->need_flush) {
	if (amd_iommu_unmap_flush || dma_dom->need_flush) {