Changeset 64045 in vbox
- Timestamp:
- Sep 27, 2016 1:35:34 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 110970
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/GIMHv.cpp
r63945 r64045 481 481 * Setup up the per-VCPU synthetic timers. 482 482 */ 483 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 484 { 485 PVMCPU pVCpu = &pVM->aCpus[idCpu]; 486 PGIMHVCPU pHvCpu = &pVCpu->gim.s.u.HvCpu; 487 488 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 489 { 490 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 491 492 /* Associate the synthetic timer with its corresponding VCPU. */ 493 pHvStimer->idCpu = pVCpu->idCpu; 494 pHvStimer->idxStimer = idxStimer; 495 496 /* Create the timer and associate the context pointers. */ 497 RTStrPrintf(&pHvStimer->szTimerDesc[0], sizeof(pHvStimer->szTimerDesc), "Hyper-V[%u] Timer%u", pVCpu->idCpu, 498 idxStimer); 499 rc = TMR3TimerCreateInternal(pVM, TMCLOCK_VIRTUAL_SYNC, gimR3HvTimerCallback, pHvStimer /* pvUser */, 500 pHvStimer->szTimerDesc, &pHvStimer->pTimerR3); 501 AssertLogRelRCReturn(rc, rc); 502 pHvStimer->pTimerR0 = TMTimerR0Ptr(pHvStimer->pTimerR3); 503 pHvStimer->pTimerRC = TMTimerRCPtr(pHvStimer->pTimerR3); 483 if ( (pHv->uBaseFeat & GIM_HV_BASE_FEAT_STIMER_MSRS) 484 || (pHv->uBaseFeat & GIM_HV_BASE_FEAT_BASIC_SYNIC_MSRS)) 485 { 486 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 487 { 488 PVMCPU pVCpu = &pVM->aCpus[idCpu]; 489 PGIMHVCPU pHvCpu = &pVCpu->gim.s.u.HvCpu; 490 491 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 492 { 493 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 494 495 /* Associate the synthetic timer with its corresponding VCPU. */ 496 pHvStimer->idCpu = pVCpu->idCpu; 497 pHvStimer->idxStimer = idxStimer; 498 499 /* Create the timer and associate the context pointers. */ 500 RTStrPrintf(&pHvStimer->szTimerDesc[0], sizeof(pHvStimer->szTimerDesc), "Hyper-V[%u] Timer%u", pVCpu->idCpu, 501 idxStimer); 502 rc = TMR3TimerCreateInternal(pVM, TMCLOCK_VIRTUAL_SYNC, gimR3HvTimerCallback, pHvStimer /* pvUser */, 503 pHvStimer->szTimerDesc, &pHvStimer->pTimerR3); 504 AssertLogRelRCReturn(rc, rc); 505 pHvStimer->pTimerR0 = TMTimerR0Ptr(pHvStimer->pTimerR3); 506 pHvStimer->pTimerRC = TMTimerRCPtr(pHvStimer->pTimerR3); 507 } 504 508 } 505 509 } … … 583 587 gimR3HvTermDebugSupport(pVM); 584 588 585 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 586 { 587 PGIMHVCPU pHvCpu = &pVM->aCpus[idCpu].gim.s.u.HvCpu; 588 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 589 { 590 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 591 TMR3TimerDestroy(pHvStimer->pTimerR3); 589 PCGIMHV pHv = &pVM->gim.s.u.Hv; 590 if ( (pHv->uBaseFeat & GIM_HV_BASE_FEAT_STIMER_MSRS) 591 || (pHv->uBaseFeat & GIM_HV_BASE_FEAT_BASIC_SYNIC_MSRS)) 592 { 593 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 594 { 595 PGIMHVCPU pHvCpu = &pVM->aCpus[idCpu].gim.s.u.HvCpu; 596 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 597 { 598 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 599 TMR3TimerDestroy(pHvStimer->pTimerR3); 600 } 592 601 } 593 602 } … … 608 617 { 609 618 RT_NOREF1(offDelta); 610 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 611 { 612 PGIMHVCPU pHvCpu = &pVM->aCpus[idCpu].gim.s.u.HvCpu; 613 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 614 { 615 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 616 pHvStimer->pTimerRC = TMTimerRCPtr(pHvStimer->pTimerR3); 619 620 PCGIMHV pHv = &pVM->gim.s.u.Hv; 621 if ( (pHv->uBaseFeat & GIM_HV_BASE_FEAT_STIMER_MSRS) 622 || (pHv->uBaseFeat & GIM_HV_BASE_FEAT_BASIC_SYNIC_MSRS)) 623 { 624 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 625 { 626 PGIMHVCPU pHvCpu = &pVM->aCpus[idCpu].gim.s.u.HvCpu; 627 for (uint8_t idxStimer = 0; idxStimer < RT_ELEMENTS(pHvCpu->aStimers); idxStimer++) 628 { 629 PGIMHVSTIMER pHvStimer = &pHvCpu->aStimers[idxStimer]; 630 pHvStimer->pTimerRC = TMTimerRCPtr(pHvStimer->pTimerR3); 631 } 617 632 } 618 633 }
Note:
See TracChangeset
for help on using the changeset viewer.