儲存庫 vbox 的更動 46415
- 時間撮記:
- 2013-6-6 下午02:07:35 (11 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r46399 r46415 1160 1160 * We cannot flush a page by guest-physical address. invvpid takes only a linear address while invept only flushes 1161 1161 * by EPT not individual addresses. We update the force flag here and flush before the next VM-entry in hmR0VmxFlushTLB*(). 1162 * This function might be called in a loop. 1162 * This function might be called in a loop. This should cause a flush-by-EPT if EPT is in use. See @bugref{6568}. 1163 1163 */ 1164 1164 VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH); … … 1224 1224 */ 1225 1225 bool fNewASID = false; 1226 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu1226 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu 1227 1227 || pVCpu->hm.s.cTlbFlushes != pCpu->cTlbFlushes) 1228 1228 { … … 1260 1260 else 1261 1261 { 1262 if (pVM->hm.s.vmx.msr.vmx_ept_vpid_caps & MSR_IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT) 1263 hmR0VmxFlushVpid(pVM, pVCpu, VMX_FLUSH_VPID_SINGLE_CONTEXT, 0 /* GCPtr */); 1264 else 1265 hmR0VmxFlushEpt(pVM, pVCpu, pVM->hm.s.vmx.enmFlushEpt); 1262 /* 1263 * Changes to the EPT paging structure by VMM requires flushing by EPT as the CPU creates 1264 * guest-physical (only EPT-tagged) mappings while traversing the EPT tables when EPT is in use. 1265 * Flushing by VPID will only flush linear (only VPID-tagged) and combined (EPT+VPID tagged) mappings 1266 * but not guest-physical mappings. 1267 * See Intel spec. 28.3.2 "Creating and Using Cached Translation Information". See @bugref{6568}. 1268 */ 1269 hmR0VmxFlushEpt(pVM, pVCpu, pVM->hm.s.vmx.enmFlushEpt); 1266 1270 } 1267 1271 … … 1338 1342 * A change in the TLB flush count implies the host CPU is online after a suspend/resume. 1339 1343 */ 1340 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu1344 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu 1341 1345 || pVCpu->hm.s.cTlbFlushes != pCpu->cTlbFlushes) 1342 1346 { … … 1404 1408 * or the host CPU is online after a suspend/resume, so we cannot reuse the current ASID anymore. 1405 1409 */ 1406 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu1410 if ( pVCpu->hm.s.idLastCpu != pCpu->idCpu 1407 1411 || pVCpu->hm.s.cTlbFlushes != pCpu->cTlbFlushes) 1408 1412 { … … 8174 8178 /* EFER also required for longmode checks in EMInterpretDisasCurrent(), but it's always up-to-date. */ 8175 8179 AssertRCReturn(rc, rc); 8180 8176 8181 Log4(("CS:RIP=%04x:%#RX64\n", pMixedCtx->cs.Sel, pMixedCtx->rip)); 8177 8182 … … 8196 8201 PDISCPUSTATE pDis = &pVCpu->hm.s.DisState; 8197 8202 /** @todo for now manually disassemble later optimize by getting the fields from 8198 * the VMCS. */ 8199 /** @todo VMX_VMCS_RO_EXIT_GUEST_LINEAR_ADDR contains the flat pointer 8203 * the VMCS. VMX_VMCS_RO_EXIT_GUEST_LINEAR_ADDR contains the flat pointer 8200 8204 * operand of the instruction. VMX_VMCS32_RO_EXIT_INSTR_INFO contains 8201 8205 * segment prefix info. */ … … 8347 8351 { 8348 8352 uint32_t uIntType = VMX_IDT_VECTORING_INFO_TYPE(pVmxTransient->uIdtVectoringInfo); 8353 8349 8354 /* Software interrupts and exceptions will be regenerated when the recompiler restarts the instruction. */ 8350 8355 if ( uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_INT … … 8370 8375 pVCpu->hm.s.Event.GCPtrFaultAddress = pMixedCtx->cr2; 8371 8376 } 8377 8372 8378 Log4(("Pending event on TaskSwitch uIntType=%#x uVector=%#x\n", uIntType, uVector)); 8373 8379 } 8374 8380 } 8375 8381 } 8382 8376 8383 /** @todo Emulate task switch someday, currently just going back to ring-3 for 8377 8384 * emulation. */ … … 8864 8871 { 8865 8872 case OP_CLI: 8873 { 8866 8874 pMixedCtx->eflags.Bits.u1IF = 0; 8867 8875 pMixedCtx->rip += pDis->cbInstr; … … 8869 8877 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitCli); 8870 8878 break; 8879 } 8871 8880 8872 8881 case OP_STI: 8882 { 8873 8883 pMixedCtx->eflags.Bits.u1IF = 1; 8874 8884 pMixedCtx->rip += pDis->cbInstr; … … 8878 8888 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitSti); 8879 8889 break; 8890 } 8880 8891 8881 8892 case OP_HLT: 8893 { 8882 8894 rc = VINF_EM_HALT; 8883 8895 pMixedCtx->rip += pDis->cbInstr; … … 8885 8897 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHlt); 8886 8898 break; 8899 } 8887 8900 8888 8901 case OP_POPF:
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器