Changeset 60464 in vbox
- Timestamp:
- Apr 12, 2016 4:56:07 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106556
- Location:
- trunk/src/VBox
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp ¶
r60353 r60464 780 780 GEN_CHECK_OFF(APICCPU, uHintedTimerInitialCount); 781 781 GEN_CHECK_OFF(APICCPU, uHintedTimerShift); 782 GEN_CHECK_OFF(APICCPU, StatMmioReadGC); 782 GEN_CHECK_OFF(APICCPU, StatMmioReadR0); 783 GEN_CHECK_OFF(APICCPU, StatMmioReadR3); 784 GEN_CHECK_OFF(APICCPU, StatMmioReadRC); 785 GEN_CHECK_OFF(APICCPU, StatMmioWriteR0); 786 GEN_CHECK_OFF(APICCPU, StatMmioWriteR3); 787 GEN_CHECK_OFF(APICCPU, StatMmioWriteRC); 788 GEN_CHECK_OFF(APICCPU, StatMsrReadR0); 789 GEN_CHECK_OFF(APICCPU, StatMsrReadR3); 790 GEN_CHECK_OFF(APICCPU, StatMsrReadRC); 791 GEN_CHECK_OFF(APICCPU, StatMsrWriteR0); 792 GEN_CHECK_OFF(APICCPU, StatMsrWriteR3); 793 GEN_CHECK_OFF(APICCPU, StatMsrWriteRC); 783 794 #else 784 795 /* PC/DevAPIC.cpp */ -
TabularUnified trunk/src/VBox/VMM/VMMAll/APICAll.cpp ¶
r60459 r60464 852 852 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 853 853 pXApicPage->icr_hi.all.u32IcrHi = uIcrHi & XAPIC_ICR_HI_DEST; 854 Log4(("APIC%u: apicSetIcrHi: uIcrHi=%#RX32\n", pVCpu->idCpu, pXApicPage->icr_hi.all.u32IcrHi)); 855 854 856 return VINF_SUCCESS; 855 857 } … … 871 873 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 872 874 pXApicPage->icr_lo.all.u32IcrLo = uIcrLo & XAPIC_ICR_LO_WR; 875 Log4(("APIC%u: apicSetIcrLo: uIcrLo=%#RX32\n", pVCpu->idCpu, pXApicPage->icr_lo.all.u32IcrLo)); 873 876 874 877 apicSendIpi(pVCpu, rcRZ); … … 909 912 * @returns Strict VBox status code. 910 913 * @param pVCpu The cross context virtual CPU structure. 911 * @param uValue The ESR value. 912 */ 913 static VBOXSTRICTRC apicSetEsr(PVMCPU pVCpu, uint32_t uValue) 914 { 915 VMCPU_ASSERT_EMT(pVCpu); 914 * @param uEsr The ESR value. 915 */ 916 static VBOXSTRICTRC apicSetEsr(PVMCPU pVCpu, uint32_t uEsr) 917 { 918 VMCPU_ASSERT_EMT(pVCpu); 919 920 Log4(("APIC%u: apicSetEr: uEsr=%#RX32\n", pVCpu->idCpu, uEsr)); 921 916 922 if ( XAPIC_IN_X2APIC_MODE(pVCpu) 917 && (u Value& ~XAPIC_ESR_WO))923 && (uEsr & ~XAPIC_ESR_WO)) 918 924 return apicMsrAccessError(pVCpu, MSR_IA32_X2APIC_ESR, APICMSRACCESS_WRITE_RSVD_BITS); 919 925 … … 1006 1012 VMCPU_ASSERT_EMT(pVCpu); 1007 1013 1014 Log4(("APIC%u: apicSetEoi: uEoi=%#RX32\n", pVCpu->idCpu, uEoi)); 1015 1008 1016 if ( XAPIC_IN_X2APIC_MODE(pVCpu) 1009 1017 && (uEoi & ~XAPIC_EOI_WO)) … … 1052 1060 Assert(!XAPIC_IN_X2APIC_MODE(pVCpu)); 1053 1061 1062 Log4(("APIC%u: apicSetLdr: uLdr=%#RX32\n", pVCpu->idCpu, uLdr)); 1063 1054 1064 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 1055 1065 apicWriteRaw32(pXApicPage, XAPIC_OFF_LDR, uLdr & XAPIC_LDR); … … 1072 1082 Assert(!XAPIC_IN_X2APIC_MODE(pVCpu)); 1073 1083 1084 Log4(("APIC%u: apicSetDfr: uDfr=%#RX32\n", pVCpu->idCpu, uDfr)); 1085 1074 1086 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 1075 1087 apicWriteRaw32(pXApicPage, XAPIC_OFF_DFR, uDfr & XAPIC_DFR); … … 1091 1103 && (uTimerDcr & ~XAPIC_TIMER_DCR)) 1092 1104 return apicMsrAccessError(pVCpu, MSR_IA32_X2APIC_TIMER_DCR, APICMSRACCESS_WRITE_RSVD_BITS); 1105 1106 Log4(("APIC%u: apicSetTimerDcr: uTimerDcr=%#RX32\n", pVCpu->idCpu, uTimerDcr)); 1093 1107 1094 1108 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); … … 1174 1188 && pXApicPage->lvt_timer.u.u2TimerMode == XAPIC_TIMER_MODE_TSC_DEADLINE) 1175 1189 return VINF_SUCCESS; 1190 1191 Log4(("APIC%u: apicSetTimerIcr: uInitialCount=%#RX32\n", pVCpu->idCpu, uInitialCount)); 1176 1192 1177 1193 /* … … 1267 1283 1268 1284 Log4(("APIC%u: apicSetLvtEntry: offLvt=%#RX16 uLvt=%#RX32\n", pVCpu->idCpu, offLvt, uLvt)); 1285 1269 1286 apicWriteRaw32(pXApicPage, offLvt, uLvt); 1270 1287 return VINF_SUCCESS; … … 1569 1586 return VINF_CPUM_R3_MSR_READ; 1570 1587 1571 STAM_COUNTER_INC(& VMCPU_TO_APICCPU(pVCpu)->StatMsrRead);1588 STAM_COUNTER_INC(&pVCpu->apic.s.CTX_SUFF(StatMsrRead)); 1572 1589 1573 1590 VBOXSTRICTRC rcStrict = VINF_SUCCESS; … … 1671 1688 return VINF_CPUM_R3_MSR_WRITE; 1672 1689 1673 STAM_COUNTER_INC(& VMCPU_TO_APICCPU(pVCpu)->StatMsrWrite);1690 STAM_COUNTER_INC(&pVCpu->apic.s.CTX_SUFF(StatMsrWrite)); 1674 1691 1675 1692 /* … … 1846 1863 APICR3Reset(pVCpu); 1847 1864 uBaseMsr &= ~(MSR_APICBASE_XAPIC_ENABLE_BIT | MSR_APICBASE_X2APIC_ENABLE_BIT); 1865 Log4(("APIC%u: Switched mode to disabled\n", pVCpu->idCpu)); 1848 1866 #else 1849 1867 return VINF_CPUM_R3_MSR_WRITE; … … 1860 1878 } 1861 1879 uBaseMsr |= MSR_APICBASE_XAPIC_ENABLE_BIT; 1880 Log4(("APIC%u: Switched mode to xApic\n", pVCpu->idCpu)); 1862 1881 break; 1863 1882 } … … 1884 1903 pX2ApicPage->ldr.u32LogicalApicId = ((pX2ApicPage->id.u32ApicId & UINT32_C(0xffff0)) << 16) 1885 1904 | (UINT32_C(1) << pX2ApicPage->id.u32ApicId & UINT32_C(0xf)); 1905 Log4(("APIC%u: Switched mode to x2Apic\n", pVCpu->idCpu)); 1886 1906 break; 1887 1907 } … … 2108 2128 if (uTpr > 0 && uVector <= uTpr) 2109 2129 { 2110 Log4(("APIC%u: APICGetInterrupt: Returns spurious vector%#x\n", pVCpu->idCpu,2130 Log4(("APIC%u: APICGetInterrupt: Spurious interrupt. uVector=%#x\n", pVCpu->idCpu, 2111 2131 pXApicPage->svr.u.u8SpuriousVector)); 2112 2132 return pXApicPage->svr.u.u8SpuriousVector; … … 2122 2142 apicSignalNextPendingIntr(pVCpu); 2123 2143 2124 Log4(("APIC%u: APICGetInterrupt: Returns vector%#x\n", pVCpu->idCpu, uVector));2144 Log4(("APIC%u: APICGetInterrupt: Valid Interrupt. uVector=%#x\n", pVCpu->idCpu, uVector)); 2125 2145 return uVector; 2126 2146 } … … 2146 2166 uint32_t uValue = 0; 2147 2167 2148 #ifdef VBOX_WITH_STATISTICS 2149 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 2150 STAM_COUNTER_INC(&CTXSUFF(pApicCpu->StatMmioRead)); 2151 #endif 2168 STAM_COUNTER_INC(&pVCpu->apic.s.CTX_SUFF(StatMmioRead)); 2152 2169 2153 2170 Log4(("APIC%u: ApicReadMmio: offReg=%#RX16\n", pVCpu->idCpu, offReg)); … … 2173 2190 uint32_t uValue = *(uint32_t *)pv; 2174 2191 2175 #ifdef VBOX_WITH_STATISTICS 2176 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 2177 STAM_COUNTER_INC(&CTXSUFF(pApicCpu->StatMmioWrite)); 2178 #endif 2192 STAM_COUNTER_INC(&pVCpu->apic.s.CTX_SUFF(StatMmioWrite)); 2179 2193 2180 2194 LogRel(("APIC%u: APICWriteMmio: offReg=%#RX16 uValue=%#RX32\n", pVCpu->idCpu, offReg, uValue)); … … 2334 2348 2335 2349 case APICMODE_XAPIC: 2350 CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_APIC); 2351 break; 2352 2336 2353 case APICMODE_X2APIC: 2337 2354 CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_APIC); -
TabularUnified trunk/src/VBox/VMM/VMMR3/APIC.cpp ¶
r60459 r60464 891 891 Assert(TMTimerIsLockOwner(pTimer)); 892 892 Assert(pVCpu); 893 LogFlow(("APIC%u: apicR3TimerCallback\n", pVCpu->idCpu)); 893 894 894 895 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); … … 897 898 { 898 899 uint8_t uVector = XAPIC_LVT_GET_VECTOR(uLvtTimer); 900 Log4(("APIC%u: apicR3TimerCallback: Raising timer interrupt. uVector=%#x\n", pVCpu->idCpu, uVector)); 899 901 APICPostInterrupt(pVCpu, uVector, XAPICTRIGGERMODE_EDGE); 900 902 } … … 1190 1192 LogRel(("APIC: fPostedIntrsEnabled=%RTbool fVirtApicRegsEnabled=%RTbool fSupportsTscDeadline=%RTbool\n", 1191 1193 pApic->fPostedIntrsEnabled, pApic->fVirtApicRegsEnabled, pApic->fSupportsTscDeadline)); 1194 1195 #ifdef VBOX_WITH_STATISTICS 1196 /* 1197 * Statistics. 1198 */ 1199 /** @todo Figure out why doing this from apicR3Construct() it doesn't work. See @bugref{8245#c48} */ 1200 #define APIC_REG_COUNTER(a_Reg, a_Desc, a_Key) \ 1201 rc = STAMR3RegisterF(pVM, a_Reg, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, a_Desc, a_Key, idCpu) 1202 1203 bool const fHasRC = !HMIsEnabled(pVM); 1204 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 1205 { 1206 PVMCPU pVCpu = &pVM->aCpus[idCpu]; 1207 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 1208 1209 APIC_REG_COUNTER(&pApicCpu->StatMmioReadR0, "Number of APIC MMIO reads in R0.", "/Devices/APIC/%u/R0/MmioRead"); 1210 APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR0, "Number of APIC MMIO writes in R0.", "/Devices/APIC/%u/R0/MmioWrite"); 1211 APIC_REG_COUNTER(&pApicCpu->StatMsrReadR0, "Number of APIC MSR reads in R0.", "/Devices/APIC/%u/R0/MsrRead"); 1212 APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR0, "Number of APIC MSR writes in R0.", "/Devices/APIC/%u/R0/MsrWrite"); 1213 1214 APIC_REG_COUNTER(&pApicCpu->StatMmioReadR3, "Number of APIC MMIO reads in R3.", "/Devices/APIC/%u/R3/MmioReadR3"); 1215 APIC_REG_COUNTER(&pApicCpu->StatMmioWriteR3, "Number of APIC MMIO writes in R3.", "/Devices/APIC/%u/R3/MmioWriteR3"); 1216 APIC_REG_COUNTER(&pApicCpu->StatMsrReadR3, "Number of APIC MSR reads in R3.", "/Devices/APIC/%u/R3/MsrReadR3"); 1217 APIC_REG_COUNTER(&pApicCpu->StatMsrWriteR3, "Number of APIC MSR writes in R3.", "/Devices/APIC/%u/R3/MsrWriteR3"); 1218 1219 if (fHasRC) 1220 { 1221 APIC_REG_COUNTER(&pApicCpu->StatMmioReadRC, "Number of APIC MMIO reads in RC.", "/Devices/APIC/%u/RC/MmioRead"); 1222 APIC_REG_COUNTER(&pApicCpu->StatMmioWriteRC, "Number of APIC MMIO writes in RC.", "/Devices/APIC/%u/RC/MmioWrite"); 1223 APIC_REG_COUNTER(&pApicCpu->StatMsrReadRC, "Number of APIC MSR reads in RC.", "/Devices/APIC/%u/RC/MsrRead"); 1224 APIC_REG_COUNTER(&pApicCpu->StatMsrWriteRC, "Number of APIC MSR writes in RC.", "/Devices/APIC/%u/RC/MsrWrite"); 1225 } 1226 } 1227 # undef APIC_REG_ACCESS_COUNTER 1228 #endif 1229 1192 1230 return VINF_SUCCESS; 1193 1231 } … … 1360 1398 pApicCpu->pTimerRC = TMTimerRCPtr(pApicCpu->pTimerR3); 1361 1399 1400 #if 0 1362 1401 rc = PDMR3CritSectInit(pVM, &pApicCpu->TimerCritSect, RT_SRC_POS, pApicCpu->szTimerDesc); 1363 1402 if (RT_SUCCESS(rc)) … … 1365 1404 else 1366 1405 return rc; 1406 #else 1407 return VINF_SUCCESS; 1408 #endif 1367 1409 } 1368 1410 else … … 1384 1426 "Recognizes 'basic', 'lvt', 'timer' as arguments, defaulting to 'basic'.", apicR3DbgInfo); 1385 1427 1386 #ifdef VBOX_WITH_STATISTICS1387 /*1388 * Statistics.1389 */1390 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)1391 {1392 PVMCPU pVCpu = &pVM->aCpus[idCpu];1393 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu);1394 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMmioReadGC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1395 "Number of APIC MMIO reads in GC.", "/Devices/APIC/%u/MmioReadGC", idCpu);1396 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMmioReadHC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1397 "Number of APIC MMIO reads in HC.", "/Devices/APIC/%u/MmioReadHC", idCpu);1398 1399 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMmioWriteGC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1400 "Number of APIC MMIO writes in GC.", "/Devices/APIC/%u/MmioWriteGC", idCpu);1401 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMmioWriteHC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1402 "Number of APIC MMIO writes in HC.", "/Devices/APIC/%u/MmioWriteHC", idCpu);1403 1404 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMsrWrite, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1405 "Number of APIC MSR writes.", "/Devices/APIC/%u/MsrWrite", idCpu);1406 PDMDevHlpSTAMRegisterF(pDevIns, &pApicCpu->StatMsrRead, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES,1407 "Number of APIC MSR reads.", "/Devices/APIC/%u/MsrRead", idCpu);1408 }1409 #endif1410 1428 return VINF_SUCCESS; 1411 1429 } -
TabularUnified trunk/src/VBox/VMM/include/APICInternal.h ¶
r60307 r60464 558 558 /** @name APIC statistics. 559 559 * @{ */ 560 /** Number of MMIO reads in GC. */ 561 STAMCOUNTER StatMmioReadGC; 562 /** Number of MMIO reads in GC. */ 563 STAMCOUNTER StatMmioReadHC; 564 /** Number of MMIO writes in GC. */ 565 STAMCOUNTER StatMmioWriteGC; 566 /** Number of MMIO writes in HC. */ 567 STAMCOUNTER StatMmioWriteHC; 568 /** Number of MSR writes. */ 569 STAMCOUNTER StatMsrWrite; 570 /** Number of MSR reads. */ 571 STAMCOUNTER StatMsrRead; 560 /** Number of MMIO reads in R0. */ 561 STAMCOUNTER StatMmioReadR0; 562 /** Number of MMIO reads in R3. */ 563 STAMCOUNTER StatMmioReadR3; 564 /** Number of MMIO reads in RC. */ 565 STAMCOUNTER StatMmioReadRC; 566 567 /** Number of MMIO writes in R0. */ 568 STAMCOUNTER StatMmioWriteR0; 569 /** Number of MMIO writes in R3. */ 570 STAMCOUNTER StatMmioWriteR3; 571 /** Number of MMIO writes in RC. */ 572 STAMCOUNTER StatMmioWriteRC; 573 574 /** Number of MSR reads in R0. */ 575 STAMCOUNTER StatMsrReadR0; 576 /** Number of MSR reads in R3. */ 577 STAMCOUNTER StatMsrReadR3; 578 /** Number of MSR reads in RC. */ 579 STAMCOUNTER StatMsrReadRC; 580 581 /** Number of MSR writes in R0. */ 582 STAMCOUNTER StatMsrWriteR0; 583 /** Number of MSR writes in R3. */ 584 STAMCOUNTER StatMsrWriteR3; 585 /** Number of MSR writes in RC. */ 586 STAMCOUNTER StatMsrWriteRC; 572 587 /** @} */ 573 588 #endif
Note:
See TracChangeset
for help on using the changeset viewer.