Changeset 60646 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Apr 22, 2016 12:59:40 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106813
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r60632 r60646 253 253 * reset. 254 254 * 255 * @param pVCpu The cross context virtual CPU structure. 256 */ 257 VMMR3_INT_DECL(void) APICR3Reset(PVMCPU pVCpu) 255 * @param pVCpu The cross context virtual CPU structure. 256 * @param fResetApicBaseMsr Whether to reset the APIC base MSR. 257 */ 258 VMMR3_INT_DECL(void) APICR3Reset(PVMCPU pVCpu, bool fResetApicBaseMsr) 258 259 { 259 260 VMCPU_ASSERT_EMT_OR_NOT_RUNNING(pVCpu); … … 291 292 /** @todo It isn't clear in the spec. where exactly the default base address 292 293 * is (re)initialized, atm we do it here in Reset. */ 293 apicR3ResetBaseMsr(pVCpu); 294 if (fResetApicBaseMsr) 295 apicR3ResetBaseMsr(pVCpu); 294 296 295 297 /* … … 373 375 PCXAPICPAGE pXApicPage = VMCPU_TO_CXAPICPAGE(pVCpu); 374 376 PCX2APICPAGE pX2ApicPage = VMCPU_TO_CX2APICPAGE(pVCpu); 377 378 uint64_t const uBaseMsr = pApicCpu->uApicBaseMsr; 379 APICMODE const enmMode = apicGetMode(uBaseMsr); 375 380 bool const fX2ApicMode = XAPIC_IN_X2APIC_MODE(pVCpu); 376 381 377 pHlp->pfnPrintf(pHlp, "VCPU[%u] APIC at %#RGp\n", pVCpu->idCpu, MSR_APICBASE_GET_PHYSADDR(pApicCpu->uApicBaseMsr)); 378 pHlp->pfnPrintf(pHlp, " Mode = %s\n", fX2ApicMode ? "x2Apic" : "xApic"); 382 pHlp->pfnPrintf(pHlp, "VCPU[%u] APIC:\n", pVCpu->idCpu); 383 pHlp->pfnPrintf(pHlp, " APIC Base MSR = %#RX64 (Addr=%#RX64)\n", uBaseMsr, 384 MSR_APICBASE_GET_PHYSADDR(uBaseMsr)); 385 pHlp->pfnPrintf(pHlp, " Mode = %#x (%s)\n", enmMode, apicGetModeName(enmMode)); 379 386 if (fX2ApicMode) 380 387 { … … 386 393 pHlp->pfnPrintf(pHlp, " Version = %#x\n", pXApicPage->version.all.u32Version); 387 394 pHlp->pfnPrintf(pHlp, " APIC Version = %#x\n", pXApicPage->version.u.u8Version); 388 pHlp->pfnPrintf(pHlp, " Max LVT entr ies= %u\n", pXApicPage->version.u.u8MaxLvtEntry);395 pHlp->pfnPrintf(pHlp, " Max LVT entry index (0..N) = %u\n", pXApicPage->version.u.u8MaxLvtEntry); 389 396 pHlp->pfnPrintf(pHlp, " EOI Broadcast supression = %RTbool\n", pXApicPage->version.u.fEoiBroadcastSupression); 390 397 if (!fX2ApicMode) … … 929 936 TMTimerStop(pApicCpu->pTimerR3); 930 937 931 APICR3Reset(pVCpuDest );938 APICR3Reset(pVCpuDest, true /* fResetApicBaseMsr */); 932 939 933 940 /* Clear the interrupt pending force flag. */ … … 1070 1077 if (fNeedsGCMapping) 1071 1078 { 1072 pApic->pvApicPibRC = =NIL_RTRCPTR;1079 pApic->pvApicPibRC = NIL_RTRCPTR; 1073 1080 int rc = MMR3HyperMapHCPhys(pVM, (void *)pApic->pvApicPibR3, NIL_RTR0PTR, pApic->HCPhysApicPib, pApic->cbApicPib, 1074 1081 "APIC PIB", (PRTGCPTR)&pApic->pvApicPibRC); … … 1127 1134 1128 1135 /* Associate the per-VCPU PIB pointers to the per-VM PIB mapping. */ 1129 size_t const offApicPib= idCpu * sizeof(APICPIB);1136 uint32_t const offApicPib = idCpu * sizeof(APICPIB); 1130 1137 pApicCpu->pvApicPibR0 = (RTR0PTR)((RTR0UINTPTR)pApic->pvApicPibR0 + offApicPib); 1131 1138 pApicCpu->pvApicPibR3 = (RTR3PTR)((RTR3UINTPTR)pApic->pvApicPibR3 + offApicPib); … … 1135 1142 /* Initialize the virtual-APIC state. */ 1136 1143 memset((void *)pApicCpu->pvApicPageR3, 0, pApicCpu->cbApicPage); 1137 APICR3Reset(pVCpu );1144 APICR3Reset(pVCpu, true /* fResetApicBaseMsr */); 1138 1145 1139 1146 #ifdef DEBUG_ramshankar
Note:
See TracChangeset
for help on using the changeset viewer.