perf: Report maximum values for counter overflow
[akaros.git] / kern / arch / x86 / perfmon.h
index a655098..3e7d6f3 100644 (file)
@@ -11,8 +11,8 @@
 #include <arch/x86.h>
 #include <atomic.h>
 #include <core_set.h>
-#include <kref.h>
 #include <stdint.h>
+#include <kthread.h>
 
 #define MAX_VAR_COUNTERS 32
 #define MAX_FIX_COUNTERS 16
@@ -33,14 +33,12 @@ struct perfmon_cpu_caps {
 };
 
 struct perfmon_alloc {
-       struct kref ref;
        struct perfmon_event ev;
        counter_t cores_counters[0];
 };
 
 struct perfmon_session {
-       struct kref ref;
-       spinlock_t lock;
+       qlock_t qlock;
        struct perfmon_alloc *allocs[MAX_PERFMON_COUNTERS];
 };
 
@@ -49,7 +47,9 @@ struct perfmon_status {
        uint64_t cores_values[0];
 };
 
-void perfmon_init(void);
+bool perfmon_supported(void);
+void perfmon_global_init(void);
+void perfmon_pcpu_init(void);
 void perfmon_interrupt(struct hw_trapframe *hw_tf, void *data);
 void perfmon_get_cpu_caps(struct perfmon_cpu_caps *pcc);
 int perfmon_open_event(const struct core_set *cset, struct perfmon_session *ps,
@@ -59,7 +59,6 @@ struct perfmon_status *perfmon_get_event_status(struct perfmon_session *ps,
                                                                                                int ped);
 void perfmon_free_event_status(struct perfmon_status *pef);
 struct perfmon_session *perfmon_create_session(void);
-void perfmon_get_session(struct perfmon_session *ps);
 void perfmon_close_session(struct perfmon_session *ps);
 
 static inline uint64_t read_pmc(uint32_t index)