diff options
author | Remy Noel <mocramis@gmail.com> | 2018-04-18 19:21:42 +0200 |
---|---|---|
committer | Remy Noel <mocramis@gmail.com> | 2018-04-21 00:04:20 +0200 |
commit | 75924457863e9dc90475b5cbd9bcabfff87cfc0d (patch) | |
tree | 8c23f70d8c41a5cb17e370735f5026f7c2c94656 /kern/perfmon.h | |
parent | b6ee3f35eb82e826e800cdc4ba483c1428a6e6d6 (diff) |
perfmon: Add overflow handling.
Only architectural version 1 handled so far.
Diffstat (limited to 'kern/perfmon.h')
-rw-r--r-- | kern/perfmon.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/kern/perfmon.h b/kern/perfmon.h index 0e5cd19..60e40e0 100644 --- a/kern/perfmon.h +++ b/kern/perfmon.h @@ -65,6 +65,7 @@ struct perfmon_pmu_ops { void (*stop)(unsigned int pmc_id); uint64_t (*read)(unsigned int pmc_id); uint8_t (*get_pmc_width)(void); + void (*handle_of_intr)(struct trap_frame *frame); }; /* @@ -217,10 +218,16 @@ INIT_OP_DECLARE(perfmon_bootstrap); INIT_OP_DECLARE(perfmon_setup); /* + * Handle overflow interrupt. + */ +void perfmon_handle_of_intr(struct trap_frame *frame); + +int perfmon_on_overflow(struct perfmon_pmu_ops *driver); + +/* * Register an architecture-specific driver. */ -int -perfmon_pmu_register(struct perfmon_pmu_ops *driver); +int perfmon_pmu_register(struct perfmon_pmu_ops *driver); /* * Get the last value of given pmc. @@ -228,6 +235,11 @@ perfmon_pmu_register(struct perfmon_pmu_ops *driver); uint64_t perfmon_cpu_pmc_get_prev(unsigned int pmc_id); /* + * Set the last value of given pmc. + */ +void perfmon_cpu_pmc_set_prev(unsigned int pmc_id, uint64_t prev); + +/* * Increment overflow counter for given pmc. */ void perfmon_cpu_pmc_inc_of(unsigned int pmc_id); |