|  | /* Copyright (c) 2014 The Regents of the University of California | 
|  | * Kevin Klues <klueska@cs.berkeley.edu> | 
|  | * See LICENSE for details. */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | __BEGIN_DECLS | 
|  |  | 
|  | /* Types of per-vcore alarms that can be set */ | 
|  | enum { | 
|  | /* This is a real-time alarm that does not take into account time that a | 
|  | * vcore spends offline not doing work. It is like the posix ITIMER_REAL | 
|  | * but for vcores. */ | 
|  | PVCALARM_REAL, | 
|  | /* This is a profiling alarm that only accounts for time that a vcore | 
|  | * spends online doing useful work. It is like the posix ITIMER_PROF but | 
|  | * for vcores. */ | 
|  | PVCALARM_PROF | 
|  | }; | 
|  |  | 
|  | /* Enable the per-vcore calarm service according to one of the policies listed | 
|  | * above.  Every interval usecs the provided callback will be called on each | 
|  | * active vcore according to that policy. */ | 
|  | int enable_pvcalarms(int policy, uint64_t interval, void (*callback) (void)); | 
|  |  | 
|  | /* Disable the currently active per-vcore alarm service */ | 
|  | int disable_pvcalarms(); | 
|  |  | 
|  | __END_DECLS |