Changeset 43468 in vbox
- Timestamp:
- Sep 28, 2012 3:21:24 PM (12 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r43466 r43468 224 224 #endif 225 225 226 pVM->hm.s.vmx.hMemObjA PIC= NIL_RTR0MEMOBJ;226 pVM->hm.s.vmx.hMemObjApicAccess = NIL_RTR0MEMOBJ; 227 227 228 228 if (pVM->hm.s.vmx.msr.vmx_proc_ctls.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_USE_TPR_SHADOW) 229 229 { 230 230 /* Allocate one page for the APIC physical page (serves for filtering accesses). */ 231 rc = RTR0MemObjAllocCont(&pVM->hm.s.vmx.hMemObjA PIC, PAGE_SIZE, false /* fExecutable */);231 rc = RTR0MemObjAllocCont(&pVM->hm.s.vmx.hMemObjApicAccess, PAGE_SIZE, false /* fExecutable */); 232 232 AssertRC(rc); 233 233 if (RT_FAILURE(rc)) 234 234 return rc; 235 235 236 pVM->hm.s.vmx.pbA PIC = (uint8_t *)RTR0MemObjAddress(pVM->hm.s.vmx.hMemObjAPIC);237 pVM->hm.s.vmx.HCPhysA PIC = RTR0MemObjGetPagePhysAddr(pVM->hm.s.vmx.hMemObjAPIC, 0);238 ASMMemZero32(pVM->hm.s.vmx.pbA PIC, PAGE_SIZE);236 pVM->hm.s.vmx.pbApicAccess = (uint8_t *)RTR0MemObjAddress(pVM->hm.s.vmx.hMemObjApicAccess); 237 pVM->hm.s.vmx.HCPhysApicAccess = RTR0MemObjGetPagePhysAddr(pVM->hm.s.vmx.hMemObjApicAccess, 0); 238 ASMMemZero32(pVM->hm.s.vmx.pbApicAccess, PAGE_SIZE); 239 239 } 240 240 else 241 241 { 242 pVM->hm.s.vmx.hMemObjA PIC= 0;243 pVM->hm.s.vmx.pbA PIC= 0;244 pVM->hm.s.vmx.HCPhysA PIC= 0;242 pVM->hm.s.vmx.hMemObjApicAccess = 0; 243 pVM->hm.s.vmx.pbApicAccess = 0; 244 pVM->hm.s.vmx.HCPhysApicAccess = 0; 245 245 } 246 246 … … 390 390 #endif /* VBOX_WITH_AUTO_MSR_LOAD_RESTORE */ 391 391 } 392 if (pVM->hm.s.vmx.hMemObjA PIC!= NIL_RTR0MEMOBJ)393 { 394 RTR0MemObjFree(pVM->hm.s.vmx.hMemObjA PIC, false);395 pVM->hm.s.vmx.hMemObjA PIC= NIL_RTR0MEMOBJ;396 pVM->hm.s.vmx.pbA PIC= 0;397 pVM->hm.s.vmx.HCPhysA PIC= 0;392 if (pVM->hm.s.vmx.hMemObjApicAccess != NIL_RTR0MEMOBJ) 393 { 394 RTR0MemObjFree(pVM->hm.s.vmx.hMemObjApicAccess, false); 395 pVM->hm.s.vmx.hMemObjApicAccess = NIL_RTR0MEMOBJ; 396 pVM->hm.s.vmx.pbApicAccess = 0; 397 pVM->hm.s.vmx.HCPhysApicAccess = 0; 398 398 } 399 399 #ifdef VBOX_WITH_CRASHDUMP_MAGIC … … 562 562 /* CR8 reads from the APIC shadow page; writes cause an exit is they lower the TPR below the threshold */ 563 563 val |= VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_USE_TPR_SHADOW; 564 Assert(pVM->hm.s.vmx.pbA PIC);564 Assert(pVM->hm.s.vmx.pbApicAccess); 565 565 } 566 566 else … … 703 703 if (pVM->hm.s.vmx.msr.vmx_proc_ctls.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_CONTROLS_USE_TPR_SHADOW) 704 704 { 705 Assert(pVM->hm.s.vmx.hMemObjA PIC);705 Assert(pVM->hm.s.vmx.hMemObjApicAccess); 706 706 /* Optional */ 707 707 rc = VMXWriteVMCS(VMX_VMCS_CTRL_TPR_THRESHOLD, 0); … … 709 709 710 710 if (pVM->hm.s.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC) 711 rc |= VMXWriteVMCS64(VMX_VMCS_CTRL_APIC_ACCESSADDR_FULL, pVM->hm.s.vmx.HCPhysA PIC);711 rc |= VMXWriteVMCS64(VMX_VMCS_CTRL_APIC_ACCESSADDR_FULL, pVM->hm.s.vmx.HCPhysApicAccess); 712 712 713 713 AssertRC(rc); … … 2775 2775 2776 2776 Assert(!(pVM->hm.s.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC) 2777 || (pVCpu->hm.s.vmx.pbVAPIC && pVM->hm.s.vmx.pbA PIC));2777 || (pVCpu->hm.s.vmx.pbVAPIC && pVM->hm.s.vmx.pbApicAccess)); 2778 2778 2779 2779 /* … … 3504 3504 { 3505 3505 Log(("Enable VT-x virtual APIC access filtering\n")); 3506 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysA PIC, X86_PTE_RW | X86_PTE_P);3506 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysApicAccess, X86_PTE_RW | X86_PTE_P); 3507 3507 AssertRC(rc2); 3508 3508 } … … 4010 4010 { 4011 4011 Log(("Enable VT-x virtual APIC access filtering\n")); 4012 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysA PIC, X86_PTE_RW | X86_PTE_P);4012 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysApicAccess, X86_PTE_RW | X86_PTE_P); 4013 4013 AssertRC(rc2); 4014 4014 } … … 4071 4071 { 4072 4072 Log(("Enable VT-x virtual APIC access filtering\n")); 4073 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysA PIC, X86_PTE_RW | X86_PTE_P);4073 rc2 = IOMMMIOMapMMIOHCPage(pVM, GCPhysApicBase, pVM->hm.s.vmx.HCPhysApicAccess, X86_PTE_RW | X86_PTE_P); 4074 4074 AssertRC(rc2); 4075 4075 } -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r43466 r43468 1107 1107 LogRel(("HM: MSR_IA32_VMX_VMCS_ENUM = %RX64\n", pVM->hm.s.vmx.msr.vmx_vmcs_enum)); 1108 1108 1109 LogRel(("HM: TPR shadow physaddr = %RHp\n", pVM->hm.s.vmx.HCPhysAPIC));1109 LogRel(("HM: APIC-access page physaddr = %RHp\n", pVM->hm.s.vmx.HCPhysApicAccess)); 1110 1110 1111 1111 /* Paranoia */ -
trunk/src/VBox/VMM/include/HMInternal.h
r43466 r43468 329 329 R3PTRTYPE(PX86PD) pNonPagingModeEPTPageTable; 330 330 331 /** R0 memory object for the APIC physical page (serves for filtering accesses). */332 RTR0MEMOBJ hMemObjA PIC;333 /** Physical address of the APIC physical page (serves for filtering accesses). */334 RTHCPHYS HCPhysA PIC;335 /** Virtual address of the APIC physical page (serves for filtering accesses). */336 R0PTRTYPE(uint8_t *) pbA PIC;331 /** R0 memory object for the APIC-access page. */ 332 RTR0MEMOBJ hMemObjApicAccess; 333 /** Physical address of the APIC-access page. */ 334 RTHCPHYS HCPhysApicAccess; 335 /** Virtual address of the APIC-access page. */ 336 R0PTRTYPE(uint8_t *) pbApicAccess; 337 337 338 338 /** R0 memory object for the MSR entry load page (guest MSRs). */
Note:
See TracChangeset
for help on using the changeset viewer.