2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
11 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Jack Lange <jarusl@cs.northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
20 #include "palacios/vmm_time.h"
21 #include "palacios/vmm.h"
24 void v3_init_time(struct guest_info * info) {
25 struct vm_time * time_state = &(info->time_state);
27 time_state->cpu_freq = V3_CPU_KHZ();
29 time_state->guest_tsc = 0;
30 time_state->cached_host_tsc = 0;
31 // time_state->pending_cycles = 0;
33 INIT_LIST_HEAD(&(time_state->timers));
34 time_state->num_timers = 0;
38 int v3_add_timer(struct guest_info * info, struct vm_timer_ops * ops, void * private_data) {
39 struct vm_timer * timer = NULL;
40 timer = (struct vm_timer *)V3_Malloc(sizeof(struct vm_timer));
41 V3_ASSERT(timer != NULL);
44 timer->private_data = private_data;
46 list_add(&(timer->timer_link), &(info->time_state.timers));
47 info->time_state.num_timers++;
53 int v3_remove_timer(struct guest_info * info, struct vm_timer * timer) {
54 list_del(&(timer->timer_link));
55 info->time_state.num_timers--;
63 void v3_update_time(struct guest_info * info, ullong_t cycles) {
64 struct vm_timer * tmp_timer;
66 info->time_state.guest_tsc += cycles;
68 list_for_each_entry(tmp_timer, &(info->time_state.timers), timer_link) {
69 tmp_timer->ops->update_time(cycles, info->time_state.cpu_freq, tmp_timer->private_data);
74 //info->time_state.pending_cycles = 0;