/********** Setup and VMX Control Fields from MSR ***********/
/* Setup IO map */
- /***** THEES NEED TO BE MOVED TO A GLOBAL LOCATION ***/
- v3_init_vmx_io_map(info->vm_info);
- v3_init_vmx_msr_map(info->vm_info);
- /**** ****/
+
struct v3_msr tmp_msr;
v3_vmx_restore_vmcs(info);
-#ifdef CONFIG_SYMBIOTIC
- if (info->vm_info->sym_state.symcalls[info->cpu_id].sym_call_active == 0) {
+#ifdef CONFIG_SYMCALL
+ if (info->sym_core_state.symcall_state.sym_call_active == 0) {
update_irq_entry_state(info);
}
#else
exit_log[info->num_exits % 10] = exit_info;
-#ifdef CONFIG_SYMBIOTIC
- if (info->vm_info->sym_state.symcalls[info->cpu_id].sym_call_active == 0) {
+#ifdef CONFIG_SYMCALL
+ if (info->sym_core_state.symcall_state.sym_call_active == 0) {
update_irq_exit_state(info);
}
#else
uint64_t ret = 0;
v3_get_msr(VMX_CR4_FIXED0_MSR,&(tmp_msr.hi),&(tmp_msr.lo));
-
+#ifdef __V3_64BIT__
__asm__ __volatile__ (
"movq %%cr4, %%rbx;"
"orq $0x00002000, %%rbx;"
:
: "%rbx"
);
+#elif __V3_32BIT__
+ __asm__ __volatile__ (
+ "movq %%cr4, %%ecx;"
+ "orq $0x00002000, %%ecx;"
+ "movq %%ecx, %0;"
+ : "=m"(ret)
+ :
+ : "%ecx"
+ );
+
+ if ((~ret & tmp_msr.value) == 0) {
+ __asm__ __volatile__ (
+ "movq %0, %%cr4;"
+ :
+ : "q"(ret)
+ );
+ } else {
+ PrintError("Invalid CR4 Settings!\n");
+ return;
+ }
+
+ __asm__ __volatile__ (
+ "movq %%cr0, %%ecx; "
+ "orq $0x00000020,%%ecx; "
+ "movq %%ecx, %%cr0;"
+ :
+ :
+ : "%ecx"
+ );
+
+#endif
+
//
// Should check and return Error here....