#include <palacios/vmx.h>
#include <palacios/vmm_checkpoint.h>
#include <palacios/vmm_hashtable.h>
+#include <palacios/vmm_direct_paging.h>
#include <palacios/vmm_dev_mgr.h>
ctx = v3_chkpt_open_ctx(chkpt, NULL, key_name);
+ v3_chkpt_load_64(ctx, "RIP", &(info->rip));
+
V3_CHKPT_STD_LOAD(ctx, info->vm_regs);
V3_CHKPT_STD_LOAD(ctx, info->ctrl_regs.cr0);
info->cpu_mode = v3_get_vm_cpu_mode(info);
info->mem_mode = v3_get_vm_mem_mode(info);
+ if (info->shdw_pg_mode == SHADOW_PAGING) {
+ if (v3_get_vm_mem_mode(info) == VIRTUAL_MEM) {
+ if (v3_activate_shadow_pt(info) == -1) {
+ PrintError("Failed to activate shadow page tables\n");
+ return -1;
+ }
+ } else {
+ if (v3_activate_passthrough_pt(info) == -1) {
+ PrintError("Failed to activate passthrough page tables\n");
+ return -1;
+ }
+ }
+ }
+
switch (cpu_type) {
case V3_SVM_CPU:
return -1;
}
+ v3_print_guest_state(info);
+
return 0;
}
memset(key_name, 0, 16);
+ v3_print_guest_state(info);
+
snprintf(key_name, 16, "guest_info%d", info->vcpu_id);
ctx = v3_chkpt_open_ctx(chkpt, NULL, key_name);
+ v3_chkpt_save_64(ctx, "RIP", &(info->rip));
+
V3_CHKPT_STD_SAVE(ctx, info->vm_regs);
V3_CHKPT_STD_SAVE(ctx, info->ctrl_regs.cr0);
goto out;
}
- /*
- if ((ret = v3_chkpt_save_dev(vm)) == -1) {
+
+ if ((ret = v3_save_vm_devices(vm, chkpt)) == -1) {
PrintError("Unable to save devices\n");
goto out;
}
- */
+
if ((ret = save_header(vm, chkpt)) == -1) {
PrintError("Unable to save header\n");
}
- /* Don't handle devices just yet
- if (v3_chkpt_load_dev(vm) == -1) {
+ if ((ret = v3_load_vm_devices(vm, chkpt)) == -1) {
PrintError("Unable to load devies\n");
+ goto out;
}
- */
if ((ret = load_header(vm, chkpt)) == -1) {
PrintError("Unable to load header\n");
}
}
- out:
+ out:
/* Resume the guest if it was running and we didn't just trash the state*/
if (vm->run_state == VM_RUNNING) {