Changeset 60706 in vbox
- Timestamp:
- Apr 26, 2016 3:44:23 PM (8 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMAll/APICAll.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/APICAll.cpp
r60689 r60706 535 535 || XAPIC_PPR_GET_PP(uVector) > XAPIC_PPR_GET_PP(uPpr)) 536 536 { 537 Log2(("APIC%u: apicSignalNextPendingIntr: Signaling pending interrupt\n", pVCpu->idCpu)); 537 538 APICSetInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); 538 539 } … … 540 541 } 541 542 else 543 { 544 Log2(("APIC%u: apicSignalNextPendingIntr: APIC software-disabled, clearing pending interrupt\n", pVCpu->idCpu)); 542 545 APICClearInterruptFF(pVCpu, PDMAPICIRQ_HARDWARE); 546 } 543 547 } 544 548 … … 1178 1182 if (isrv >= 0) 1179 1183 { 1180 /* 1181 * Dispensing the spurious-interrupt vector does not affect the ISR. 1182 * See Intel spec. 10.9 "Spurious Interrupt". 1183 */ 1184 Assert(isrv <= (int)UINT8_MAX); 1184 1185 uint8_t const uVector = isrv; 1185 if (uVector != pXApicPage->svr.u.u8SpuriousVector) 1186 { 1187 apicClearVectorInReg(&pXApicPage->isr, uVector); 1188 apicUpdatePpr(pVCpu); 1189 bool fLevelTriggered = apicTestVectorInReg(&pXApicPage->tmr, uVector); 1190 if (fLevelTriggered) 1191 { 1192 /** @todo We need to broadcast EOI to IO APICs here. */ 1193 apicClearVectorInReg(&pXApicPage->tmr, uVector); 1194 } 1195 1196 Log2(("APIC%u: apicSetEoi: Acknowledged %s triggered interrupt. uVector=%#x\n", pVCpu->idCpu, 1197 fLevelTriggered ? "level" : "edge", uVector)); 1198 1199 apicSignalNextPendingIntr(pVCpu); 1200 } 1186 apicClearVectorInReg(&pXApicPage->isr, uVector); 1187 apicUpdatePpr(pVCpu); 1188 Log2(("APIC%u: apicSetEoi: Cleared interrupt from ISR. uVector=%#x\n", pVCpu->idCpu, uVector)); 1189 1190 bool fLevelTriggered = apicTestVectorInReg(&pXApicPage->tmr, uVector); 1191 if (fLevelTriggered) 1192 { 1193 /** @todo We need to broadcast EOI to IO APICs here. */ 1194 apicClearVectorInReg(&pXApicPage->tmr, uVector); 1195 Log2(("APIC%u: apicSetEoi: Cleared level triggered interrupt from TMR. uVector=%#x\n", pVCpu->idCpu, uVector)); 1196 } 1197 1198 apicSignalNextPendingIntr(pVCpu); 1201 1199 } 1202 1200 … … 2313 2311 uint8_t const uVector = irrv; 2314 2312 2315 /** @todo this cannot possibly happen for anything other than ExtINT 2316 * interrupts right? */ 2313 /* 2314 * This can happen if the APIC receives an interrupt when the CPU has interrupts 2315 * disabled but the TPR is raised by the guest before re-enabling interrupts. 2316 */ 2317 2317 uint8_t const uTpr = pXApicPage->tpr.u8Tpr; 2318 2318 if (uTpr > 0 && uVector <= uTpr) 2319 2319 { 2320 Log2(("APIC%u: APICGetInterrupt: Spurious interrupt. uVector=%#x \n", pVCpu->idCpu,2321 pXApicPage->svr.u.u8SpuriousVector));2320 Log2(("APIC%u: APICGetInterrupt: Spurious interrupt. uVector=%#x Tpr=%#x SpuriousVector=%#x\n", pVCpu->idCpu, 2321 uVector, uTpr, pXApicPage->svr.u.u8SpuriousVector)); 2322 2322 return pXApicPage->svr.u.u8SpuriousVector; 2323 2323 } … … 2368 2368 *(uint32_t *)pv = uValue; 2369 2369 2370 Log2(("APIC%u: A picReadMmio: offReg=%#RX16 uValue=%#RX32\n", pVCpu->idCpu, offReg, uValue));2370 Log2(("APIC%u: APICReadMmio: offReg=%#RX16 uValue=%#RX32\n", pVCpu->idCpu, offReg, uValue)); 2371 2371 return rc; 2372 2372 } … … 2515 2515 uint64_t const cTicksToNext = (uint64_t)uInitialCount << uTimerShift; 2516 2516 2517 Log2(("APIC%u: APICStartTimer: uInitialCount=% uuTimerShift=%u cTicksToNext=%RU64\n", pVCpu->idCpu, uInitialCount,2517 Log2(("APIC%u: APICStartTimer: uInitialCount=%#RX32 uTimerShift=%u cTicksToNext=%RU64\n", pVCpu->idCpu, uInitialCount, 2518 2518 uTimerShift, cTicksToNext)); 2519 2519
Note:
See TracChangeset
for help on using the changeset viewer.

