Changeset 55693 in vbox
- Timestamp:
- May 6, 2015 2:00:15 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 100096
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp ¶
r55493 r55693 1240 1240 1241 1241 /* Irq pending after the above change? */ 1242 if (pThis->svga.u32Irq Mask & pThis->svga.u32IrqStatus)1242 if (pThis->svga.u32IrqStatus & u32) 1243 1243 { 1244 1244 Log(("SVGA_REG_IRQMASK: Trigger interrupt with status %x\n", pThis->svga.u32IrqStatus)); … … 1498 1498 /* Clear the irq in case all events have been cleared. */ 1499 1499 if (!(pThis->svga.u32IrqStatus & pThis->svga.u32IrqMask)) 1500 { 1501 Log(("vmsvgaIOWrite SVGA_IRQSTATUS_PORT: clearing IRQ\n")); 1500 1502 PDMDevHlpPCISetIrqNoWait(pDevIns, 0, 0); 1503 } 1501 1504 break; 1502 1505 } … … 3194 3197 STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCommands); 3195 3198 3196 /* FIFO progress might trigger an interrupt. */ 3197 if (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FIFO_PROGRESS) 3199 /* 3200 * Raise IRQ if required. Must enter the critical section here 3201 * before making final decisions here, otherwise cubebench and 3202 * others may end up waiting forever. 3203 */ 3204 if ( u32IrqStatus 3205 || (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FIFO_PROGRESS)) 3198 3206 { 3199 Log(("vmsvgaFIFOLoop: fifo progress irq\n")); 3200 u32IrqStatus |= SVGA_IRQFLAG_FIFO_PROGRESS; 3201 } 3202 3203 /* Irq pending? */ 3204 if (pThis->svga.u32IrqMask & u32IrqStatus) 3205 { 3206 Log(("vmsvgaFIFOLoop: Trigger interrupt with status %x\n", u32IrqStatus)); 3207 ASMAtomicOrU32(&pThis->svga.u32IrqStatus, u32IrqStatus); 3208 PDMDevHlpPCISetIrqNoWait(pDevIns, 0, 1); 3207 PDMCritSectEnter(&pThis->CritSect, VERR_IGNORED); 3208 3209 /* FIFO progress might trigger an interrupt. */ 3210 if (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FIFO_PROGRESS) 3211 { 3212 Log(("vmsvgaFIFOLoop: fifo progress irq\n")); 3213 u32IrqStatus |= SVGA_IRQFLAG_FIFO_PROGRESS; 3214 } 3215 3216 /* Unmasked IRQ pending? */ 3217 if (pThis->svga.u32IrqMask & u32IrqStatus) 3218 { 3219 Log(("vmsvgaFIFOLoop: Trigger interrupt with status %x\n", u32IrqStatus)); 3220 ASMAtomicOrU32(&pThis->svga.u32IrqStatus, u32IrqStatus); 3221 PDMDevHlpPCISetIrq(pDevIns, 0, 1); 3222 } 3223 3224 PDMCritSectLeave(&pThis->CritSect); 3209 3225 } 3210 3226 }
Note:
See TracChangeset
for help on using the changeset viewer.