// Copyright 2017 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#ifndef ZIRCON_KERNEL_INCLUDE_KERNEL_STATS_H_
#define ZIRCON_KERNEL_INCLUDE_KERNEL_STATS_H_

#include <sys/types.h>
#include <zircon/compiler.h>
#include <zircon/types.h>

// per cpu guest statistics
struct guest_stats {
  ulong vm_entries;
  ulong vm_exits;
#ifdef __aarch64__
  ulong wfi_wfe_instructions;
  ulong instruction_aborts;
  ulong data_aborts;
  ulong system_instructions;
  ulong smc_instructions;
  ulong interrupts;
#else
  ulong interrupts;
  ulong interrupt_windows;
  ulong cpuid_instructions;
  ulong hlt_instructions;
  ulong control_register_accesses;
  ulong io_instructions;
  ulong rdmsr_instructions;
  ulong wrmsr_instructions;
  ulong ept_violations;
  ulong xsetbv_instructions;
  ulong pause_instructions;
  ulong vmcall_instructions;
#endif
};

// per cpu kernel level statistics
struct cpu_stats {
  zx_duration_t idle_time;
  ulong reschedules;
  ulong context_switches;
  ulong irq_preempts;
  ulong preempts;
  ulong yields;

  // cpu level interrupts and exceptions
  ulong interrupts;  // hardware interrupts, minus timer interrupts or inter-processor interrupts
  ulong timer_ints;  // timer interrupts
  ulong timers;      // timer callbacks
  ulong perf_ints;   // performance monitor interrupts
  ulong syscalls;
  ulong page_faults;

  // inter-processor interrupts
  ulong reschedule_ipis;
  ulong generic_ipis;
};

// include after the cpu_stats definition above, since it is part of the percpu structure
#include <kernel/percpu.h>

#define GUEST_STATS_INC(name)                                                    \
  do {                                                                           \
    __atomic_fetch_add(&percpu::GetCurrent().gstats.name, 1u, __ATOMIC_RELAXED); \
  } while (0)

#define CPU_STATS_INC(name)                                                     \
  do {                                                                          \
    __atomic_fetch_add(&percpu::GetCurrent().stats.name, 1u, __ATOMIC_RELAXED); \
  } while (0)

#endif  // ZIRCON_KERNEL_INCLUDE_KERNEL_STATS_H_
