Changeset 62641 in vbox for trunk/src/VBox/VMM/VMMR3/GIMKvm.cpp
- Timestamp:
- Jul 28, 2016 9:11:13 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/GIMKvm.cpp
r62478 r62641 267 267 * @returns VBox status code. 268 268 * @param pVM The cross context VM structure. 269 * @param pSSM Pointer to the SSMhandle.269 * @param pSSM The saved state handle. 270 270 */ 271 271 VMMR3_INT_DECL(int) gimR3KvmSave(PVM pVM, PSSMHANDLE pSSM) 272 272 { 273 PCGIMKVM p cKvm = &pVM->gim.s.u.Kvm;273 PCGIMKVM pKvm = &pVM->gim.s.u.Kvm; 274 274 275 275 /* … … 283 283 for (uint32_t i = 0; i < pVM->cCpus; i++) 284 284 { 285 PCGIMKVMCPU p cKvmCpu = &pVM->aCpus[i].gim.s.u.KvmCpu;285 PCGIMKVMCPU pKvmCpu = &pVM->aCpus[i].gim.s.u.KvmCpu; 286 286 287 287 /* Guest may alter flags (namely GIM_KVM_SYSTEM_TIME_FLAGS_GUEST_PAUSED bit). So re-read them from guest-memory. */ 288 288 GIMKVMSYSTEMTIME SystemTime; 289 289 RT_ZERO(SystemTime); 290 if (MSR_GIM_KVM_SYSTEM_TIME_IS_ENABLED(p cKvmCpu->u64SystemTimeMsr))290 if (MSR_GIM_KVM_SYSTEM_TIME_IS_ENABLED(pKvmCpu->u64SystemTimeMsr)) 291 291 { 292 int rc = PGMPhysSimpleReadGCPhys(pVM, &SystemTime, p cKvmCpu->GCPhysSystemTime, sizeof(GIMKVMSYSTEMTIME));292 int rc = PGMPhysSimpleReadGCPhys(pVM, &SystemTime, pKvmCpu->GCPhysSystemTime, sizeof(GIMKVMSYSTEMTIME)); 293 293 AssertRCReturn(rc, rc); 294 294 } 295 295 296 SSMR3PutU64(pSSM, p cKvmCpu->u64SystemTimeMsr);297 SSMR3PutU64(pSSM, p cKvmCpu->uTsc);298 SSMR3PutU64(pSSM, p cKvmCpu->uVirtNanoTS);299 SSMR3PutGCPhys(pSSM, p cKvmCpu->GCPhysSystemTime);300 SSMR3PutU32(pSSM, p cKvmCpu->u32SystemTimeVersion);296 SSMR3PutU64(pSSM, pKvmCpu->u64SystemTimeMsr); 297 SSMR3PutU64(pSSM, pKvmCpu->uTsc); 298 SSMR3PutU64(pSSM, pKvmCpu->uVirtNanoTS); 299 SSMR3PutGCPhys(pSSM, pKvmCpu->GCPhysSystemTime); 300 SSMR3PutU32(pSSM, pKvmCpu->u32SystemTimeVersion); 301 301 SSMR3PutU8(pSSM, SystemTime.fFlags); 302 302 } … … 305 305 * Save per-VM data. 306 306 */ 307 SSMR3PutU64(pSSM, p cKvm->u64WallClockMsr);308 return SSMR3PutU32(pSSM, p cKvm->uBaseFeat);307 SSMR3PutU64(pSSM, pKvm->u64WallClockMsr); 308 return SSMR3PutU32(pSSM, pKvm->uBaseFeat); 309 309 } 310 310 … … 315 315 * @returns VBox status code. 316 316 * @param pVM The cross context VM structure. 317 * @param pSSM Pointer to the SSM handle. 318 * @param uSSMVersion The GIM saved-state version. 319 */ 320 VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion) 317 * @param pSSM The saved state handle. 318 */ 319 VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM) 321 320 { 322 321 /* … … 328 327 if (uKvmSavedStatVersion != GIM_KVM_SAVED_STATE_VERSION) 329 328 return SSMR3SetLoadError(pSSM, VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION, RT_SRC_POS, 330 N_("Unsupported KVM saved-state version %u (expected %u)."), uKvmSavedStatVersion,331 GIM_KVM_SAVED_STATE_VERSION);329 N_("Unsupported KVM saved-state version %u (expected %u)."), 330 uKvmSavedStatVersion, GIM_KVM_SAVED_STATE_VERSION); 332 331 333 332 /* … … 345 344 PGIMKVMCPU pKvmCpu = &pVCpu->gim.s.u.KvmCpu; 346 345 347 uint8_t fSystemTimeFlags = 0;348 346 SSMR3GetU64(pSSM, &pKvmCpu->u64SystemTimeMsr); 349 347 SSMR3GetU64(pSSM, &pKvmCpu->uTsc); … … 474 472 * Worker for gimR3KvmEnableWallClock} 475 473 */ 476 static DECLCALLBACK(VBOXSTRICTRC) gimR3KvmEnableWallClockCallback(PVM pVM, PVMCPU pVCpu, void *pvData) 477 { 478 Assert(pvData); 479 PKVMWALLCLOCKINFO pWallClockInfo = (PKVMWALLCLOCKINFO)pvData; 474 static DECLCALLBACK(VBOXSTRICTRC) gimR3KvmEnableWallClockCallback(PVM pVM, PVMCPU pVCpu, void *pvUser) 475 { 476 PKVMWALLCLOCKINFO pWallClockInfo = (PKVMWALLCLOCKINFO)pvUser; AssertPtr(pWallClockInfo); 480 477 RTGCPHYS GCPhysWallClock = pWallClockInfo->GCPhysWallClock; 478 RT_NOREF1(pVCpu); 481 479 482 480 /* … … 495 493 * Ensure the version is incrementally even. 496 494 */ 495 /* faster: uVersion = (uVersion | 1) + 1; */ 497 496 if (!(uVersion & 1)) 498 497 ++uVersion; … … 521 520 rc = PGMPhysSimpleWriteGCPhys(pVM, GCPhysWallClock, &WallClock, sizeof(GIMKVMWALLCLOCK)); 522 521 if (RT_SUCCESS(rc)) 523 {524 522 LogRel(("GIM: KVM: Enabled wall-clock struct. at %#RGp - u32Sec=%u u32Nano=%u uVersion=%#RU32\n", GCPhysWallClock, 525 523 WallClock.u32Sec, WallClock.u32Nano, WallClock.u32Version)); 526 }527 524 else 528 525 LogRel(("GIM: KVM: Failed to write wall-clock struct. at %#RGp. rc=%Rrc\n", GCPhysWallClock, rc));
Note:
See TracChangeset
for help on using the changeset viewer.