#include <palacios/vmm_sprintf.h>
#include <palacios/vmm_xed.h>
#include <palacios/vmm_direct_paging.h>
-
-#ifdef V3_CONFIG_SYSCALL_HIJACK
-#include <palacios/vmm_syscall_hijack.h>
-#include <palacios/vmm_mpi_accel.h>
-#endif
-
+#include <palacios/vmm_barrier.h>
v3_cpu_mode_t v3_get_vm_cpu_mode(struct guest_info * info) {
V3_Print("NumExits: %u\n", (uint32_t)info->num_exits);
+ V3_Print("IRQ STATE: started=%d, pending=%d\n",
+ info->intr_core_state.irq_started,
+ info->intr_core_state.irq_pending);
+ V3_Print("EXCP STATE: err_code_valid=%d, err_code=%x\n",
+ info->excp_state.excp_error_code_valid,
+ info->excp_state.excp_error_code);
+
+
v3_print_segments(&(info->segments));
v3_print_ctrl_regs(info);
#include <palacios/vmcs.h>
#include <palacios/vmcb.h>
static int info_hcall(struct guest_info * core, uint_t hcall_id, void * priv_data) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
int cpu_valid = 0;
V3_Print("************** Guest State ************\n");
// init SVM/VMX
#ifdef V3_CONFIG_SVM
- if ((cpu_type == V3_SVM_CPU) || (cpu_type == V3_SVM_REV3_CPU)) {
+ if ((v3_mach_type == V3_SVM_CPU) || (v3_mach_type == V3_SVM_REV3_CPU)) {
cpu_valid = 1;
PrintDebugVMCB((vmcb_t *)(core->vmm_data));
}
#endif
#ifdef V3_CONFIG_VMX
- if ((cpu_type == V3_VMX_CPU) || (cpu_type == V3_VMX_EPT_CPU) || (cpu_type == V3_VMX_EPT_UG_CPU)) {
+ if ((v3_mach_type == V3_VMX_CPU) || (v3_mach_type == V3_VMX_EPT_CPU) || (v3_mach_type == V3_VMX_EPT_UG_CPU)) {
cpu_valid = 1;
v3_print_vmcs();
}
#endif
if (!cpu_valid) {
- PrintError("Invalid CPU Type 0x%x\n", cpu_type);
+ PrintError("Invalid CPU Type 0x%x\n", v3_mach_type);
return -1;
}
int v3_init_vm(struct v3_vm_info * vm) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
v3_init_intr_routers(vm);
v3_init_ext_manager(vm);
+ v3_init_barrier(vm);
+
// Initialize the memory map
if (v3_init_mem_map(vm) == -1) {
PrintError("Could not initialize shadow map\n");
// init SVM/VMX
- switch (cpu_type) {
+ switch (v3_mach_type) {
#ifdef V3_CONFIG_SVM
case V3_SVM_CPU:
case V3_SVM_REV3_CPU:
break;
#endif
default:
- PrintError("Invalid CPU Type 0x%x\n", cpu_type);
+ PrintError("Invalid CPU Type 0x%x\n", v3_mach_type);
return -1;
}
int v3_free_vm_internal(struct v3_vm_info * vm) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
v3_remove_hypercall(vm, GUEST_INFO_HCALL);
#endif
// init SVM/VMX
- switch (cpu_type) {
+ switch (v3_mach_type) {
#ifdef V3_CONFIG_SVM
case V3_SVM_CPU:
case V3_SVM_REV3_CPU:
break;
#endif
default:
- PrintError("Invalid CPU Type 0x%x\n", cpu_type);
+ PrintError("Invalid CPU Type 0x%x\n", v3_mach_type);
return -1;
}
v3_deinit_intr_routers(vm);
v3_deinit_host_events(vm);
+ v3_deinit_barrier(vm);
+
v3_deinit_cpuid_map(vm);
v3_deinit_msr_map(vm);
v3_deinit_io_map(vm);
int v3_init_core(struct guest_info * core) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
struct v3_vm_info * vm = core->vm_info;
v3_init_symbiotic_core(core);
#endif
-// KCH
-#ifdef V3_CONFIG_SYSCALL_HIJACK
- v3_init_exec_hooks(core);
- v3_init_mpi_accel(core);
-#endif
-
// init SVM/VMX
- switch (cpu_type) {
+ switch (v3_mach_type) {
#ifdef V3_CONFIG_SVM
case V3_SVM_CPU:
case V3_SVM_REV3_CPU:
break;
#endif
default:
- PrintError("Invalid CPU Type 0x%x\n", cpu_type);
+ PrintError("Invalid CPU Type 0x%x\n", v3_mach_type);
return -1;
}
int v3_free_core(struct guest_info * core) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
#ifdef V3_CONFIG_SYMBIOTIC
v3_deinit_core_telemetry(core);
#endif
- switch (cpu_type) {
+ switch (v3_mach_type) {
#ifdef V3_CONFIG_SVM
case V3_SVM_CPU:
case V3_SVM_REV3_CPU:
break;
#endif
default:
- PrintError("Invalid CPU Type 0x%x\n", cpu_type);
+ PrintError("Invalid CPU Type 0x%x\n", v3_mach_type);
return -1;
}