- Timestamp:
- Feb 13, 2021 5:53:16 PM (4 years ago)
- Location:
- trunk/src/VBox/VMM/VMMR0
- Files:
-
- 2 edited
-
HMR0A.asm (modified) (1 diff)
-
HMSVMR0.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMR0A.asm
r87754 r87755 1339 1339 mov rax, [rsp + cbFrame + frm_pGstCtx] ; (rbp still not operational) 1340 1340 1341 mov qword [rax + CPUMCTX.ebp], rbp 1341 mov qword [rax + CPUMCTX.edx], rdx 1342 mov qword [rax + CPUMCTX.ecx], rcx 1343 mov rcx, rax 1344 rdtsc 1345 mov qword [rcx + CPUMCTX.ebp], rbp 1342 1346 lea rbp, [rsp + cbFrame] 1343 mov qword [rax + CPUMCTX.ecx], rcx 1344 mov rcx, SPECTRE_FILLER 1345 mov qword [rax + CPUMCTX.edx], rdx 1346 mov rdx, rcx 1347 mov qword [rax + CPUMCTX.r8], r8 1348 mov r8, rcx 1349 mov qword [rax + CPUMCTX.r9], r9 1350 mov r9, rcx 1351 mov qword [rax + CPUMCTX.r10], r10 1352 mov r10, rcx 1353 mov qword [rax + CPUMCTX.r11], r11 1354 mov r11, rcx 1355 mov qword [rax + CPUMCTX.edi], rdi 1347 shl rdx, 20h 1348 or rax, rdx ; TSC value in RAX 1349 mov qword [rcx + CPUMCTX.r8], r8 1350 mov r8, SPECTRE_FILLER ; SPECTRE filler in R8 1351 mov qword [rcx + CPUMCTX.r9], r9 1352 mov r9, r8 1353 mov qword [rcx + CPUMCTX.r10], r10 1354 mov r10, r8 1355 mov qword [rcx + GVMCPU.hmr0 + HMR0PERVCPU.uTscExit - VMCPU.cpum.GstCtx], rax 1356 mov qword [rcx + CPUMCTX.r11], r11 1357 mov r11, r8 1358 mov qword [rcx + CPUMCTX.edi], rdi 1356 1359 %ifdef ASM_CALL64_MSC 1357 1360 mov rdi, [rbp + frm_saved_rdi] 1358 1361 %else 1359 mov rdi, r cx1360 %endif 1361 mov qword [r ax + CPUMCTX.esi], rsi1362 mov rdi, r8 1363 %endif 1364 mov qword [rcx + CPUMCTX.esi], rsi 1362 1365 %ifdef ASM_CALL64_MSC 1363 1366 mov rsi, [rbp + frm_saved_rsi] 1364 1367 %else 1365 mov rsi, r cx1366 %endif 1367 mov qword [r ax + CPUMCTX.ebx], rbx1368 mov rsi, r8 1369 %endif 1370 mov qword [rcx + CPUMCTX.ebx], rbx 1368 1371 mov rbx, [rbp + frm_saved_rbx] 1369 mov qword [r ax + CPUMCTX.r12], r121372 mov qword [rcx + CPUMCTX.r12], r12 1370 1373 mov r12, [rbp + frm_saved_r12] 1371 mov qword [r ax + CPUMCTX.r13], r131374 mov qword [rcx + CPUMCTX.r13], r13 1372 1375 mov r13, [rbp + frm_saved_r13] 1373 mov qword [r ax + CPUMCTX.r14], r141376 mov qword [rcx + CPUMCTX.r14], r14 1374 1377 mov r14, [rbp + frm_saved_r14] 1375 mov qword [r ax + CPUMCTX.r15], r151378 mov qword [rcx + CPUMCTX.r15], r15 1376 1379 mov r15, [rbp + frm_saved_r15] 1377 1380 1378 1381 %if %4 != 0 1379 1382 ; Set r8 = &pVCpu->cpum.GstCtx; for use below when saving and restoring SSE state. 1380 mov r8, r ax1383 mov r8, rcx 1381 1384 %endif 1382 1385 -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r87752 r87755 4350 4350 Assert(!VMMRZCallRing3IsEnabled(pVCpu)); 4351 4351 4352 uint64_t const uHostTsc = ASMReadTSC(); /* Read the TSC as soon as possible. */4353 4352 ASMAtomicUoWriteBool(&pVCpu->hm.s.fCheckedTLBFlush, false); /* See HMInvalidatePageOnAllVCpus(): used for TLB flushing. */ 4354 4353 ASMAtomicIncU32(&pVCpu->hmr0.s.cWorldSwitchExits); /* Initialized in vmR3CreateUVM(): used for EMT poking. */ … … 4361 4360 { 4362 4361 if (!pSvmTransient->fIsNestedGuest) 4363 TMCpuTickSetLastSeen(pVCpu, uHostTsc+ pVmcbCtrl->u64TSCOffset);4362 TMCpuTickSetLastSeen(pVCpu, pVCpu->hmr0.s.uTscExit + pVmcbCtrl->u64TSCOffset); 4364 4363 #ifdef VBOX_WITH_NESTED_HWVIRT_SVM 4365 4364 else 4366 4365 { 4367 4366 /* The nested-guest VMCB TSC offset shall eventually be restored on #VMEXIT via HMNotifySvmNstGstVmexit(). */ 4368 uint64_t const uGstTsc = CPUMRemoveNestedGuestTscOffset(pVCpu, uHostTsc+ pVmcbCtrl->u64TSCOffset);4367 uint64_t const uGstTsc = CPUMRemoveNestedGuestTscOffset(pVCpu, pVCpu->hmr0.s.uTscExit + pVmcbCtrl->u64TSCOffset); 4369 4368 TMCpuTickSetLastSeen(pVCpu, uGstTsc); 4370 4369 } … … 4382 4381 STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatInGC, &pVCpu->hm.s.StatPreExit, x); 4383 4382 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 4384 TMNotifyEndOfExecution(pVM, pVCpu, uHostTsc);/* Notify TM that the guest is no longer running. */4383 TMNotifyEndOfExecution(pVM, pVCpu, pVCpu->hmr0.s.uTscExit); /* Notify TM that the guest is no longer running. */ 4385 4384 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_HM); 4386 4385 … … 4460 4459 HMSVM_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_RIP); 4461 4460 EMHistoryAddExit(pVCpu, EMEXIT_MAKE_FT(EMEXIT_F_KIND_SVM, pSvmTransient->u64ExitCode & EMEXIT_F_TYPE_MASK), 4462 pVCpu->cpum.GstCtx.cs.u64Base + pVCpu->cpum.GstCtx.rip, uHostTsc);4461 pVCpu->cpum.GstCtx.cs.u64Base + pVCpu->cpum.GstCtx.rip, pVCpu->hmr0.s.uTscExit); 4463 4462 } 4464 4463
Note:
See TracChangeset
for help on using the changeset viewer.

