- Timestamp:
- Apr 15, 2016 10:33:13 AM (9 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
r60464 r60516 792 792 GEN_CHECK_OFF(APICCPU, StatMsrWriteR3); 793 793 GEN_CHECK_OFF(APICCPU, StatMsrWriteRC); 794 GEN_CHECK_OFF(APICCPU, StatUpdatePendingIntrs); 795 GEN_CHECK_OFF(APICCPU, StatPostInterrupt); 794 796 #else 795 797 /* PC/DevAPIC.cpp */ -
trunk/src/VBox/VMM/VMMAll/APICAll.cpp
r60479 r60516 1081 1081 static void apicUpdatePpr(PVMCPU pVCpu) 1082 1082 { 1083 VMCPU_ASSERT_EMT _OR_NOT_RUNNING(pVCpu);1083 VMCPU_ASSERT_EMT(pVCpu); 1084 1084 1085 1085 /* See Intel spec 10.8.3.1 "Task and Processor Priorities". */ … … 1103 1103 static uint8_t apicGetPpr(PVMCPU pVCpu) 1104 1104 { 1105 VMCPU_ASSERT_EMT _OR_NOT_RUNNING(pVCpu);1105 VMCPU_ASSERT_EMT(pVCpu); 1106 1106 1107 1107 /* … … 2394 2394 { 2395 2395 Assert(pVCpu); 2396 Assert(uVector > XAPIC_ILLEGAL_VECTOR_END); 2396 2397 2397 2398 PCAPIC pApic = VM_TO_APIC(pVCpu->CTX_SUFF(pVM)); 2398 2399 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 2400 2401 STAM_PROFILE_START(&pApicCpu->StatPostInterrupt, a); 2402 2399 2403 /* Validate the vector. See Intel spec. 10.5.2 "Valid Interrupt Vectors". */ 2400 2404 if (RT_LIKELY(uVector > XAPIC_ILLEGAL_VECTOR_END)) … … 2406 2410 apicSetVectorInPib(CTX_SUFF(pApicCpu->pvApicPib), uVector); 2407 2411 bool const fAlreadySet = apicSetNotificationBitInPib(CTX_SUFF(pApicCpu->pvApicPib)); 2408 if ( fAlreadySet)2409 return;2410 2411 if (pApic->fPostedIntrsEnabled)2412 { /** @todo posted-interrupt call to hardware */ }2413 else2414 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE);2412 if (!fAlreadySet) 2413 { 2414 if (pApic->fPostedIntrsEnabled) 2415 { /** @todo posted-interrupt call to hardware */ } 2416 else 2417 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); 2418 } 2415 2419 } 2416 2420 else … … 2422 2426 apicSetVectorInPib(&pApicCpu->ApicPibLevel.aVectorBitmap[0], uVector); 2423 2427 bool const fAlreadySet = apicSetNotificationBitInPib(&pApicCpu->ApicPibLevel.aVectorBitmap[0]); 2424 if (fAlreadySet) 2425 return; 2426 2427 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); 2428 if (!fAlreadySet) 2429 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); 2428 2430 } 2429 2431 } 2430 2432 else 2431 2433 apicSetError(pVCpu, XAPIC_ESR_RECV_ILLEGAL_VECTOR); 2434 2435 STAM_PROFILE_STOP(&pApicCpu->StatPostInterrupt, a); 2432 2436 } 2433 2437 … … 2537 2541 PAPIC pApic = VM_TO_APIC(CTX_SUFF(pVCpu->pVM)); 2538 2542 Assert(!pApic->fVirtApicRegsEnabled); 2543 NOREF(pApic); 2539 2544 2540 2545 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); … … 2567 2572 PAPIC pApic = VM_TO_APIC(CTX_SUFF(pVCpu->pVM)); 2568 2573 Assert(!pApic->fVirtApicRegsEnabled); 2574 NOREF(pApic); 2569 2575 2570 2576 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); … … 2591 2597 PXAPICPAGE pXApicPage = VMCPU_TO_XAPICPAGE(pVCpu); 2592 2598 2599 STAM_PROFILE_START(&pApicCpu->StatUpdatePendingIntrs, a); 2600 2593 2601 /* Update edge-triggered pending interrupts. */ 2594 2602 for (;;) … … 2628 2636 } 2629 2637 } 2638 2639 STAM_PROFILE_STOP(&pApicCpu->StatUpdatePendingIntrs, a); 2630 2640 } 2631 2641 -
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r60475 r60516 411 411 pHlp->pfnPrintf(pHlp, " Recv Illegal Vector = %RTbool\n", pXApicPage->esr.u.fRcvdIllegalVector); 412 412 pHlp->pfnPrintf(pHlp, " Illegal Register Address = %RTbool\n", pXApicPage->esr.u.fIllegalRegAddr); 413 pHlp->pfnPrintf(pHlp, " ICR Low = %#x\n", pXApicPage->icr_lo.all );413 pHlp->pfnPrintf(pHlp, " ICR Low = %#x\n", pXApicPage->icr_lo.all.u32IcrLo); 414 414 pHlp->pfnPrintf(pHlp, " Vector = %u (%#x)\n", pXApicPage->icr_lo.u.u8Vector, 415 415 pXApicPage->icr_lo.u.u8Vector); … … 1295 1295 } while(0) 1296 1296 1297 #define APIC_PROF_COUNTER(a_Reg, a_Desc, a_Key) \ 1298 do { \ 1299 rc = STAMR3RegisterF(pVM, a_Reg, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, a_Desc, a_Key, \ 1300 idCpu); \ 1301 AssertRCReturn(rc, rc); \ 1302 } while(0) 1303 1297 1304 bool const fHasRC = !HMIsEnabled(pVM); 1298 1305 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) … … 1318 1325 APIC_REG_COUNTER(&pApicCpu->StatMsrWriteRC, "Number of APIC MSR writes in RC.", "/Devices/APIC/%u/RC/MsrWrite"); 1319 1326 } 1327 1328 APIC_PROF_COUNTER(&pApicCpu->StatUpdatePendingIntrs, "Profiling of APICUpdatePendingInterrupts", 1329 "/PROF/CPU%d/APIC/UpdatePendingInterrupts"); 1330 APIC_PROF_COUNTER(&pApicCpu->StatPostInterrupt, "Profiling of APICPostInterrupt", "/PROF/CPU%d/APIC/PostInterrupt"); 1320 1331 } 1321 1332 # undef APIC_REG_ACCESS_COUNTER -
trunk/src/VBox/VMM/include/APICInternal.h
r60475 r60516 587 587 /** Number of MSR writes in RC. */ 588 588 STAMCOUNTER StatMsrWriteRC; 589 590 /** Profiling of APICUpdatePendingInterrupts(). */ 591 STAMPROFILE StatUpdatePendingIntrs; 592 /** Profiling of APICPostInterrupt(). */ 593 STAMPROFILE StatPostInterrupt; 589 594 /** @} */ 590 595 #endif
Note:
See TracChangeset
for help on using the changeset viewer.