提交 399be2f5 编写于 作者: J Joerg Roedel

iommu/amd: Add stat counter for IOMMUv2 events

Add some interesting statistic counters for events when
IOMMUv2 is active.
Signed-off-by: NJoerg Roedel <joerg.roedel@amd.com>
上级 6a113ddc
...@@ -359,6 +359,11 @@ DECLARE_STATS_COUNTER(domain_flush_single); ...@@ -359,6 +359,11 @@ DECLARE_STATS_COUNTER(domain_flush_single);
DECLARE_STATS_COUNTER(domain_flush_all); DECLARE_STATS_COUNTER(domain_flush_all);
DECLARE_STATS_COUNTER(alloced_io_mem); DECLARE_STATS_COUNTER(alloced_io_mem);
DECLARE_STATS_COUNTER(total_map_requests); DECLARE_STATS_COUNTER(total_map_requests);
DECLARE_STATS_COUNTER(complete_ppr);
DECLARE_STATS_COUNTER(invalidate_iotlb);
DECLARE_STATS_COUNTER(invalidate_iotlb_all);
DECLARE_STATS_COUNTER(pri_requests);
static struct dentry *stats_dir; static struct dentry *stats_dir;
static struct dentry *de_fflush; static struct dentry *de_fflush;
...@@ -393,6 +398,10 @@ static void amd_iommu_stats_init(void) ...@@ -393,6 +398,10 @@ static void amd_iommu_stats_init(void)
amd_iommu_stats_add(&domain_flush_all); amd_iommu_stats_add(&domain_flush_all);
amd_iommu_stats_add(&alloced_io_mem); amd_iommu_stats_add(&alloced_io_mem);
amd_iommu_stats_add(&total_map_requests); amd_iommu_stats_add(&total_map_requests);
amd_iommu_stats_add(&complete_ppr);
amd_iommu_stats_add(&invalidate_iotlb);
amd_iommu_stats_add(&invalidate_iotlb_all);
amd_iommu_stats_add(&pri_requests);
} }
#endif #endif
...@@ -509,6 +518,8 @@ static void iommu_handle_ppr_entry(struct amd_iommu *iommu, u32 head) ...@@ -509,6 +518,8 @@ static void iommu_handle_ppr_entry(struct amd_iommu *iommu, u32 head)
volatile u64 *raw; volatile u64 *raw;
int i; int i;
INC_STATS_COUNTER(pri_requests);
raw = (u64 *)(iommu->ppr_log + head); raw = (u64 *)(iommu->ppr_log + head);
/* /*
...@@ -3356,6 +3367,8 @@ static int __flush_pasid(struct protection_domain *domain, int pasid, ...@@ -3356,6 +3367,8 @@ static int __flush_pasid(struct protection_domain *domain, int pasid,
static int __amd_iommu_flush_page(struct protection_domain *domain, int pasid, static int __amd_iommu_flush_page(struct protection_domain *domain, int pasid,
u64 address) u64 address)
{ {
INC_STATS_COUNTER(invalidate_iotlb);
return __flush_pasid(domain, pasid, address, false); return __flush_pasid(domain, pasid, address, false);
} }
...@@ -3376,6 +3389,8 @@ EXPORT_SYMBOL(amd_iommu_flush_page); ...@@ -3376,6 +3389,8 @@ EXPORT_SYMBOL(amd_iommu_flush_page);
static int __amd_iommu_flush_tlb(struct protection_domain *domain, int pasid) static int __amd_iommu_flush_tlb(struct protection_domain *domain, int pasid)
{ {
INC_STATS_COUNTER(invalidate_iotlb_all);
return __flush_pasid(domain, pasid, CMD_INV_IOMMU_ALL_PAGES_ADDRESS, return __flush_pasid(domain, pasid, CMD_INV_IOMMU_ALL_PAGES_ADDRESS,
true); true);
} }
...@@ -3495,6 +3510,8 @@ int amd_iommu_complete_ppr(struct pci_dev *pdev, int pasid, ...@@ -3495,6 +3510,8 @@ int amd_iommu_complete_ppr(struct pci_dev *pdev, int pasid,
struct amd_iommu *iommu; struct amd_iommu *iommu;
struct iommu_cmd cmd; struct iommu_cmd cmd;
INC_STATS_COUNTER(complete_ppr);
dev_data = get_dev_data(&pdev->dev); dev_data = get_dev_data(&pdev->dev);
iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu = amd_iommu_rlookup_table[dev_data->devid];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册