X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_time.c;h=1c345d461b23867f9902c67ff9af724d80006534;hb=a0948840c3cfe0a15d4fe04d149ca45d70354b05;hp=027236d1636b4e47dbb2ac86a4374f0c3eebaa02;hpb=d8fc6aa4bc2a5d9cec50923e9d2bd30f867dd50a;p=palacios.git diff --git a/palacios/src/palacios/vmm_time.c b/palacios/src/palacios/vmm_time.c index 027236d..1c345d4 100644 --- a/palacios/src/palacios/vmm_time.c +++ b/palacios/src/palacios/vmm_time.c @@ -2,17 +2,14 @@ #include "palacios/vmm.h" -void v3_init_time(struct vm_time * time_state) { - ullong_t cpu_khz = 0; +void v3_init_time(struct guest_info * info) { + struct vm_time * time_state = &(info->time_state); - V3_CPU_KHZ(cpu_khz); - time_state->cpu_freq = cpu_khz; - - PrintDebug("CPU KHZ = HI=%x LO=%x\n", (uint_t)(cpu_khz >> 32), (uint_t)cpu_khz); + time_state->cpu_freq = V3_CPU_KHZ(); time_state->guest_tsc = 0; time_state->cached_host_tsc = 0; - time_state->pending_cycles = 0; + // time_state->pending_cycles = 0; INIT_LIST_HEAD(&(time_state->timers)); time_state->num_timers = 0; @@ -20,30 +17,40 @@ void v3_init_time(struct vm_time * time_state) { int v3_add_timer(struct guest_info * info, struct vm_timer_ops * ops, void * private_data) { - // V3_Malloc + struct vm_timer * timer = NULL; + timer = (struct vm_timer *)V3_Malloc(sizeof(struct vm_timer)); + V3_ASSERT(timer != NULL); + + timer->ops = ops; + timer->private_data = private_data; - /* list_add(&(timer->timer_link), &(info->time_state.timers)); info->time_state.num_timers++; - */ + return 0; } -int remove_timer(struct guest_info * info, struct vm_timer * timer) { + +int v3_remove_timer(struct guest_info * info, struct vm_timer * timer) { list_del(&(timer->timer_link)); info->time_state.num_timers--; + V3_Free(timer); return 0; } -void update_timers(struct guest_info * info) { + +void v3_update_time(struct guest_info * info, ullong_t cycles) { struct vm_timer * tmp_timer; + info->time_state.guest_tsc += cycles; + list_for_each_entry(tmp_timer, &(info->time_state.timers), timer_link) { - tmp_timer->ops.update_time(info->time_state.pending_cycles, info->time_state.cpu_freq, tmp_timer->private_data); + tmp_timer->ops->update_time(cycles, info->time_state.cpu_freq, tmp_timer->private_data); } + - info->time_state.pending_cycles = 0; + //info->time_state.pending_cycles = 0; }