1 /* (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> */
2 /* (c) 2008, The V3VEE Project <http://www.v3vee.org> */
5 #include "palacios/vmm_time.h"
6 #include "palacios/vmm.h"
9 void v3_init_time(struct guest_info * info) {
10 struct vm_time * time_state = &(info->time_state);
12 time_state->cpu_freq = V3_CPU_KHZ();
14 time_state->guest_tsc = 0;
15 time_state->cached_host_tsc = 0;
16 // time_state->pending_cycles = 0;
18 INIT_LIST_HEAD(&(time_state->timers));
19 time_state->num_timers = 0;
23 int v3_add_timer(struct guest_info * info, struct vm_timer_ops * ops, void * private_data) {
24 struct vm_timer * timer = NULL;
25 timer = (struct vm_timer *)V3_Malloc(sizeof(struct vm_timer));
26 V3_ASSERT(timer != NULL);
29 timer->private_data = private_data;
31 list_add(&(timer->timer_link), &(info->time_state.timers));
32 info->time_state.num_timers++;
38 int v3_remove_timer(struct guest_info * info, struct vm_timer * timer) {
39 list_del(&(timer->timer_link));
40 info->time_state.num_timers--;
48 void v3_update_time(struct guest_info * info, ullong_t cycles) {
49 struct vm_timer * tmp_timer;
51 info->time_state.guest_tsc += cycles;
53 list_for_each_entry(tmp_timer, &(info->time_state.timers), timer_link) {
54 tmp_timer->ops->update_time(cycles, info->time_state.cpu_freq, tmp_timer->private_data);
59 //info->time_state.pending_cycles = 0;