Changeset 108545 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 13, 2025 8:43:30 AM (7 weeks ago)
- svn:sync-xref-src-repo-rev:
- 167938
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h
r108434 r108545 1147 1147 AssertReturn(VM_IS_NEM_ENABLED(pVM), VERR_NEM_IPE_9); 1148 1148 1149 /** @todo Do this WHvSuspendPartitionTime call to when the VM is suspended. */ 1150 HRESULT hrcSuspend = E_FAIL; 1151 if (WHvSuspendPartitionTime && WHvResumePartitionTime) 1152 { 1153 hrcSuspend = WHvSuspendPartitionTime(pVM->nem.s.hPartition); 1154 AssertLogRelMsg(SUCCEEDED(hrcSuspend), 1155 ("WHvSuspendPartitionTime(%p) -> %Rhrc (Last=%#x/%u)\n", 1156 pVM->nem.s.hPartition, hrcSuspend, RTNtLastStatusValue(), RTNtLastErrorValue())); 1157 } 1158 1149 1159 /* 1150 1160 * Call the offical API to do the job. … … 1169 1179 { 1170 1180 Assert(enmName == WHvX64RegisterTsc); 1171 const uint64_t offDelta = (ASMReadTSC() - uFirstTsc);1181 const uint64_t offDelta = SUCCEEDED(hrcSuspend) ? 0 : ASMReadTSC() - uFirstTsc; 1172 1182 Value.Reg64 = uPausedTscValue + offDelta; 1173 1183 hrc = WHvSetVirtualProcessorRegisters(pVM->nem.s.hPartition, iCpu, &enmName, 1, &Value); … … 1175 1185 ("WHvSetVirtualProcessorRegisters(%p, 0,{tsc},2,%#RX64 + %#RX64) -> %Rhrc (Last=%#x/%u)\n", 1176 1186 pVM->nem.s.hPartition, iCpu, uPausedTscValue, offDelta, hrc, RTNtLastStatusValue(), RTNtLastErrorValue()) 1187 , VERR_NEM_SET_TSC); 1188 } 1189 1190 if (SUCCEEDED(hrcSuspend)) 1191 { 1192 hrc = WHvResumePartitionTime(pVM->nem.s.hPartition); 1193 AssertLogRelMsgReturn(SUCCEEDED(hrc), 1194 ("WHvResumePartitionTime(%p) -> %Rhrc (Last=%#x/%u)\n", 1195 pVM->nem.s.hPartition, hrc, RTNtLastStatusValue(), RTNtLastErrorValue()) 1177 1196 , VERR_NEM_SET_TSC); 1178 1197 } -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp
r108434 r108545 163 163 static decltype(WHvGetVirtualProcessorRegisters) * g_pfnWHvGetVirtualProcessorRegisters; 164 164 static decltype(WHvSetVirtualProcessorRegisters) * g_pfnWHvSetVirtualProcessorRegisters; 165 static decltype(WHv SuspendPartitionTime) * g_pfnWHvSuspendPartitionTime;166 static decltype(WHv ResumePartitionTime) * g_pfnWHvResumePartitionTime;165 static decltype(WHvResumePartitionTime) *g_pfnWHvResumePartitionTime; 166 static decltype(WHvSuspendPartitionTime) *g_pfnWHvSuspendPartitionTime; 167 167 decltype(WHvGetVirtualProcessorState) * g_pfnWHvGetVirtualProcessorState = NULL; 168 168 decltype(WHvSetVirtualProcessorState) * g_pfnWHvSetVirtualProcessorState = NULL; … … 222 222 NEM_WIN_IMPORT(0, false, WHvGetVirtualProcessorRegisters), 223 223 NEM_WIN_IMPORT(0, false, WHvSetVirtualProcessorRegisters), 224 NEM_WIN_IMPORT(0, true, WHv SuspendPartitionTime),225 NEM_WIN_IMPORT(0, true, WHv ResumePartitionTime),224 NEM_WIN_IMPORT(0, true, WHvResumePartitionTime), /* since 19H1 */ 225 NEM_WIN_IMPORT(0, true, WHvSuspendPartitionTime), /* since 19H1 */ 226 226 NEM_WIN_IMPORT(0, true, WHvRequestInterrupt), 227 227 NEM_WIN_IMPORT(0, true, WHvGetVirtualProcessorState), … … 303 303 # define WHvGetVirtualProcessorRegisters g_pfnWHvGetVirtualProcessorRegisters 304 304 # define WHvSetVirtualProcessorRegisters g_pfnWHvSetVirtualProcessorRegisters 305 # define WHvResumePartitionTime g_pfnWHvResumePartitionTime 305 306 # define WHvSuspendPartitionTime g_pfnWHvSuspendPartitionTime 306 # define WHvResumePartitionTime g_pfnWHvResumePartitionTime307 307 # define WHvRequestInterrupt g_pfnWHvRequestInterrupt 308 308 # define WHvGetVirtualProcessorState g_pfnWHvGetVirtualProcessorState
Note:
See TracChangeset
for help on using the changeset viewer.