#include <palacios/vmm_rbtree.h>
#include <palacios/vmm_barrier.h>
+#include <palacios/vmm_debug.h>
#ifdef V3_CONFIG_CHECKPOINT
#include <palacios/vmm_checkpoint.h>
return -1;
}
+ core->core_run_state = CORE_STOPPED;
+
return 0;
}
#ifdef V3_CONFIG_CHECKPOINT
int v3_svm_save_core(struct guest_info * core, void * ctx){
- v3_chkpt_save_8(ctx, "cpl", &(core->cpl));
- v3_chkpt_save(ctx, "vmcb_data", PAGE_SIZE, core->vmm_data);
+ if (v3_chkpt_save_8(ctx, "cpl", &(core->cpl)) == -1) {
+ PrintError("Could not save SVM cpl\n");
+ return -1;
+ }
+
+ if (v3_chkpt_save(ctx, "vmcb_data", PAGE_SIZE, core->vmm_data) == -1) {
+ PrintError("Could not save SVM vmcb\n");
+ return -1;
+ }
return 0;
}
int v3_svm_load_core(struct guest_info * core, void * ctx){
- v3_chkpt_load_8(ctx, "cpl", &(core->cpl));
+ if (v3_chkpt_load_8(ctx, "cpl", &(core->cpl)) == -1) {
+ PrintError("Could not load SVM cpl\n");
+ return -1;
+ }
if (v3_chkpt_load(ctx, "vmcb_data", PAGE_SIZE, core->vmm_data) == -1) {
return -1;
} else {
ctrl_area->instrs.RDTSC = 0;
ctrl_area->svm_instrs.RDTSCP = 0;
- ctrl_area->TSC_OFFSET = v3_tsc_host_offset(&info->time_state);
+ if (info->time_state.flags & VM_TIME_TSC_PASSTHROUGH) {
+ ctrl_area->TSC_OFFSET = 0;
+ } else {
+ ctrl_area->TSC_OFFSET = v3_tsc_host_offset(&info->time_state);
+ }
}
return 0;
}