X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm.c;h=6d8cdd28bfd350248c0ec029fd43c7cc4397bf65;hb=f40ba895fdbe492f6e82bcf9995a61b95d128928;hp=5220c835a55be32c4321123df7b6311e13763311;hpb=1316eb77b6d89245583446dab3345f749c415764;p=palacios.git diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c index 5220c83..6d8cdd2 100644 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@ -337,13 +337,14 @@ static int start_svm_guest(struct guest_info *info) { PrintDebug("exit_info2 low = 0x%.8x\n", *(uint_t*)&(guest_ctrl->exit_info2)); PrintDebug("exit_info2 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(guest_ctrl->exit_info2)) + 4)); + linear_addr = get_addr_linear(info, info->rip, &(info->segments.cs)); + if (info->mem_mode == PHYSICAL_MEM) { guest_pa_to_host_va(info, linear_addr, &host_addr); } else if (info->mem_mode == VIRTUAL_MEM) { guest_va_to_host_va(info, linear_addr, &host_addr); } - PrintDebug("Host Address of rip = 0x%p\n", (void *)host_addr); PrintDebug("Instr (15 bytes) at %p:\n", (void *)host_addr); @@ -366,11 +367,11 @@ int v3_is_svm_capable() { uint_t vm_cr_low = 0, vm_cr_high = 0; addr_t eax = 0, ebx = 0, ecx = 0, edx = 0; - v3_cpuid(CPUID_FEATURE_IDS, &eax, &ebx, &ecx, &edx); + v3_cpuid(CPUID_EXT_FEATURE_IDS, &eax, &ebx, &ecx, &edx); - PrintDebug("CPUID_FEATURE_IDS_ecx=%p\n", (void *)ecx); + PrintDebug("CPUID_EXT_FEATURE_IDS_ecx=%p\n", (void *)ecx); - if ((ecx & CPUID_FEATURE_IDS_ecx_svm_avail) == 0) { + if ((ecx & CPUID_EXT_FEATURE_IDS_ecx_svm_avail) == 0) { PrintDebug("SVM Not Available\n"); return 0; } else { @@ -418,7 +419,7 @@ static int has_svm_nested_paging() { v3_cpuid(CPUID_SVM_REV_AND_FEATURE_IDS, &eax, &ebx, &ecx, &edx); - //PrintDebug("CPUID_FEATURE_IDS_edx=0x%x\n", edx); + //PrintDebug("CPUID_EXT_FEATURE_IDS_edx=0x%x\n", edx); if ((edx & CPUID_SVM_REV_AND_FEATURE_IDS_edx_np) == 0) { PrintDebug("SVM Nested Paging not supported\n"); @@ -442,11 +443,9 @@ void v3_init_SVM(struct v3_ctrl_ops * vmm_ops) { PrintDebug("SVM Enabled\n"); - // Setup the host state save area host_vmcb = V3_AllocPages(4); - /* 64-BIT-ISSUE */ // msr.e_reg.high = 0; //msr.e_reg.low = (uint_t)host_vmcb; @@ -455,8 +454,6 @@ void v3_init_SVM(struct v3_ctrl_ops * vmm_ops) { PrintDebug("Host State being saved at %p\n", (void *)(addr_t)host_vmcb); v3_set_msr(SVM_VM_HSAVE_PA_MSR, msr.e_reg.high, msr.e_reg.low); - - /* * Test VMSAVE/VMLOAD Latency */ @@ -486,12 +483,8 @@ void v3_init_SVM(struct v3_ctrl_ops * vmm_ops) { end <<= 32; end += end_lo; - PrintDebug("VMSave Cycle Latency: %d\n", (uint32_t)(end - start)); - - - __asm__ __volatile__ ( "rdtsc ; " "movl %%eax, %%esi ; " @@ -513,12 +506,7 @@ void v3_init_SVM(struct v3_ctrl_ops * vmm_ops) { PrintDebug("VMLoad Cycle Latency: %d\n", (uint32_t)(end - start)); - - - } - - /* End Latency Test */ if (has_svm_nested_paging() == 1) {