x86: vmm: Finalize to owning_proc, not cur_proc.
[akaros.git] / kern / arch / x86 / perfmon.h
index 822b96a..060eecc 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];
 };
 
@@ -52,6 +50,8 @@ struct perfmon_status {
 bool perfmon_supported(void);
 void perfmon_global_init(void);
 void perfmon_pcpu_init(void);
+void perfmon_snapshot_hwtf(struct hw_trapframe *hw_tf);
+void perfmon_snapshot_vmtf(struct vm_trapframe *vm_tf);
 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,
@@ -61,7 +61,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)