perf.h (1710B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * perf.h - performance monitor header 4 * 5 * Copyright (C) 2021 Intel Corporation 6 * 7 * Author: Lu Baolu <baolu.lu@linux.intel.com> 8 */ 9 10enum latency_type { 11 DMAR_LATENCY_INV_IOTLB = 0, 12 DMAR_LATENCY_INV_DEVTLB, 13 DMAR_LATENCY_INV_IEC, 14 DMAR_LATENCY_PRQ, 15 DMAR_LATENCY_NUM 16}; 17 18enum latency_count { 19 COUNTS_10e2 = 0, /* < 0.1us */ 20 COUNTS_10e3, /* 0.1us ~ 1us */ 21 COUNTS_10e4, /* 1us ~ 10us */ 22 COUNTS_10e5, /* 10us ~ 100us */ 23 COUNTS_10e6, /* 100us ~ 1ms */ 24 COUNTS_10e7, /* 1ms ~ 10ms */ 25 COUNTS_10e8_plus, /* 10ms and plus*/ 26 COUNTS_MIN, 27 COUNTS_MAX, 28 COUNTS_SUM, 29 COUNTS_NUM 30}; 31 32struct latency_statistic { 33 bool enabled; 34 u64 counter[COUNTS_NUM]; 35 u64 samples; 36}; 37 38#ifdef CONFIG_DMAR_PERF 39int dmar_latency_enable(struct intel_iommu *iommu, enum latency_type type); 40void dmar_latency_disable(struct intel_iommu *iommu, enum latency_type type); 41bool dmar_latency_enabled(struct intel_iommu *iommu, enum latency_type type); 42void dmar_latency_update(struct intel_iommu *iommu, enum latency_type type, 43 u64 latency); 44int dmar_latency_snapshot(struct intel_iommu *iommu, char *str, size_t size); 45#else 46static inline int 47dmar_latency_enable(struct intel_iommu *iommu, enum latency_type type) 48{ 49 return -EINVAL; 50} 51 52static inline void 53dmar_latency_disable(struct intel_iommu *iommu, enum latency_type type) 54{ 55} 56 57static inline bool 58dmar_latency_enabled(struct intel_iommu *iommu, enum latency_type type) 59{ 60 return false; 61} 62 63static inline void 64dmar_latency_update(struct intel_iommu *iommu, enum latency_type type, u64 latency) 65{ 66} 67 68static inline int 69dmar_latency_snapshot(struct intel_iommu *iommu, char *str, size_t size) 70{ 71 return 0; 72} 73#endif /* CONFIG_DMAR_PERF */