On 21/05/2019 16:52, Andrew Murray wrote:
The ARMv8 Performance Monitors Extension includes an architectural
event type named CHAIN which allows for chaining counters together.

Let's extract the test for this event into a header file such that
other users, such as KVM (for PMU emulation) can make use of.

Signed-off-by: Andrew Murray <andrew.mur...@arm.com>
---
  arch/arm64/include/asm/perf_event.h | 5 +++++
  arch/arm64/kernel/perf_event.c      | 2 +-
  2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/perf_event.h 
b/arch/arm64/include/asm/perf_event.h
index c593761ba61c..cd13f3fd1055 100644
--- a/arch/arm64/include/asm/perf_event.h
+++ b/arch/arm64/include/asm/perf_event.h
@@ -219,6 +219,11 @@
  #define ARMV8_PMU_USERENR_CR  (1 << 2) /* Cycle counter can be read at EL0 */
  #define ARMV8_PMU_USERENR_ER  (1 << 3) /* Event counter can be read at EL0 */
+static inline bool armv8pmu_evtype_is_chain(u64 evtype)
+{
+       return (evtype == ARMV8_PMUV3_PERFCTR_CHAIN);
+}
+
  #ifdef CONFIG_PERF_EVENTS
  struct pt_regs;
  extern unsigned long perf_instruction_pointer(struct pt_regs *regs);
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
index 314b1adedf06..265bd835a724 100644
--- a/arch/arm64/kernel/perf_event.c
+++ b/arch/arm64/kernel/perf_event.c
@@ -879,7 +879,7 @@ static int armv8pmu_set_event_filter(struct hw_perf_event 
*event,
  static int armv8pmu_filter_match(struct perf_event *event)
  {
        unsigned long evtype = event->hw.config_base & ARMV8_PMU_EVTYPE_EVENT;
-       return evtype != ARMV8_PMUV3_PERFCTR_CHAIN;
+       return !armv8pmu_evtype_is_chain(evtype);
  }
static void armv8pmu_reset(void *info)


Reviewed-by: Suzuki K Poulose <suzuki.poul...@arm.com>
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to