Index: /trunk/src/VBox/Devices/Graphics/DevVGA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 60464)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 60465)
@@ -6985,4 +6985,16 @@
 }
 
+static DECLCALLBACK(void) vgaR3PowerOn(PPDMDEVINS pDevIns)
+{
+    PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
+    vmsvgaR3PowerOn(pDevIns);
+    VBVAOnResume(pThis);
+}
+
+static DECLCALLBACK(void) vgaR3Resume(PPDMDEVINS pDevIns)
+{
+    PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
+    VBVAOnResume(pThis);
+}
 
 /**
@@ -7019,5 +7031,5 @@
     /* pfnPowerOn */
 #ifdef VBOX_WITH_VMSVGA
-    vmsvgaR3PowerOn,
+    vgaR3PowerOn,
 #else
     NULL,
@@ -7028,5 +7040,5 @@
     NULL,
     /* pfnResume */
-    NULL,
+    vgaR3Resume,
     /* pfnAttach */
     vgaAttach,
Index: /trunk/src/VBox/Devices/Graphics/DevVGA.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 60464)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 60465)
@@ -683,4 +683,5 @@
 void     VBVAPause (PVGASTATE pVGAState, bool fPause);
 void     VBVAOnVBEChanged(PVGASTATE pVGAState);
+void     VBVAOnResume(PVGASTATE pThis);
 
 bool VBVAIsPaused(PVGASTATE pVGAState);
Index: /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 60464)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 60465)
@@ -2086,5 +2086,14 @@
     PDMCritSectLeave(&pVGAState->CritSect);
 
-    PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
+    /* Set IRQ only for a running VM.
+     * If HGSMIHOSTFLAGS_IRQ is set, then vgaR3Resume/vgaR3PowerOn will
+     * set the postponed IRQ.
+     */
+    VMSTATE enmVMState = PDMDevHlpVMState(pDevIns);
+    if (   enmVMState == VMSTATE_RUNNING
+        || enmVMState == VMSTATE_RUNNING_LS)
+    {
+        PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
+    }
 }
 
@@ -2103,4 +2112,16 @@
      * 3. IRQ is set */
     VMR3ReqCallNoWait(PDMDevHlpGetVM(pVGAState->pDevInsR3), VMCPUID_ANY, (PFNRT)vbvaRaiseIrqEMT, 2, pVGAState, fFlags);
+}
+
+void VBVAOnResume(PVGASTATE pThis)
+{
+    PPDMDEVINS pDevIns = pThis->pDevInsR3;
+
+    PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY);
+    bool fIrq = RT_BOOL(HGSMIGetHostGuestFlags(pThis->pHGSMI) & HGSMIHOSTFLAGS_IRQ);
+    PDMCritSectLeave(&pThis->CritSect);
+
+    if (fIrq)
+        PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
 }
 
Index: /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 60464)
+++ /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 60465)
@@ -474,4 +474,9 @@
     AssertPtrReturnVoid(pIns->pHGFlags);
     ASMAtomicOrU32(&pIns->pHGFlags->u32HostFlags, flags);
+}
+
+uint32_t HGSMIGetHostGuestFlags(HGSMIINSTANCE *pIns)
+{
+    return pIns->pHGFlags? ASMAtomicReadU32(&pIns->pHGFlags->u32HostFlags) : 0;
 }
 
Index: /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h	(revision 60464)
+++ /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h	(revision 60465)
@@ -92,4 +92,5 @@
 
 void HGSMISetHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
+uint32_t HGSMIGetHostGuestFlags(HGSMIINSTANCE *pIns);
 
 void HGSMIClearHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
