Index: /trunk/src/VBox/Devices/Audio/DevHDA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 70245)
+++ /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 70246)
@@ -1482,7 +1482,7 @@
     /* Some guests tend to write SDnSTS even if the stream is not running.
      * So make sure to check if the RUN bit is set first. */
-    const bool fInRun = RT_BOOL(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN);
-
-    Log3Func(("[SD%RU8] fRun=%RTbool %R[sdsts]\n", pStream->u8SD, fInRun, v));
+    const bool fRunning = pStream->State.fRunning;
+
+    Log3Func(("[SD%RU8] fRunning=%RTbool %R[sdsts]\n", pStream->u8SD, fRunning, v));
 
     PHDASTREAMPERIOD pPeriod = &pStream->State.Period;
@@ -1504,5 +1504,5 @@
             hdaStreamPeriodEnd(pPeriod);
 
-            if (fInRun)
+            if (fRunning)
                 hdaStreamPeriodBegin(pPeriod, hdaWalClkGetCurrent(pThis) /* Use current wall clock time */);
         }
Index: /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp	(revision 70245)
+++ /trunk/src/VBox/Devices/Audio/DevHDACommon.cpp	(revision 70246)
@@ -659,5 +659,5 @@
             PHDASTREAM pStream = &pThis->aStreams[i];
 
-            if (!(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN))
+            if (!pStream->State.fRunning)
                 continue;
 
Index: /trunk/src/VBox/Devices/Audio/HDAStream.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 70245)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 70246)
@@ -55,4 +55,5 @@
 
     pStream->State.fInReset = false;
+    pStream->State.fRunning = false;
 #ifdef HDA_USE_DMA_ACCESS_HANDLER
     RTListInit(&pStream->State.lstDMAHandlers);
@@ -354,6 +355,5 @@
 
 # ifdef VBOX_STRICT
-    AssertReleaseMsg(!RT_BOOL(HDA_STREAM_REG(pThis, CTL, uSD) & HDA_SDCTL_RUN),
-                     ("[SD%RU8] Cannot reset stream while in running state\n", uSD));
+    AssertReleaseMsg(!pStream->State.fRunning, ("[SD%RU8] Cannot reset stream while in running state\n", uSD));
 # endif
 
@@ -475,4 +475,9 @@
     }
 
+    if (RT_SUCCESS(rc))
+    {
+        pStream->State.fRunning = fEnable;
+    }
+
     LogFunc(("[SD%RU8] rc=%Rrc\n", pStream->u8SD, rc));
     return rc;
@@ -741,7 +746,7 @@
 
     /* Stream not running? */
-    if (!(HDA_STREAM_REG(pThis, CTL, pStream->u8SD) & HDA_SDCTL_RUN))
-    {
-        Log3Func(("[SD%RU8] RUN bit not set\n", pStream->u8SD));
+    if (!pStream->State.fRunning)
+    {
+        Log3Func(("[SD%RU8] Not running\n", pStream->u8SD));
         fProceed = false;
     }
Index: /trunk/src/VBox/Devices/Audio/HDAStream.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 70245)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 70246)
@@ -118,6 +118,8 @@
      *  in reset mode and therefore not acccessible by the guest. */
     volatile bool           fInReset;
+	/** Flag indicating if the stream is in running state or not. */
+	volatile bool			fRunning;
     /** Unused, padding. */
-    uint32_t                Padding0;
+    uint8_t                 Padding0[3];
     /** Critical section to serialize access. */
     RTCRITSECT              CritSect;
@@ -191,5 +193,7 @@
     /** Stream descriptor number (SDn). */
     uint8_t                  u8SD;
-    uint8_t                  Padding0[7];
+	/** Current channel index.
+	 *  For a stereo stream, this is u8Channel + 1. */
+    uint8_t                  u8Channel;
     /** DMA base address (SDnBDPU - SDnBDPL). */
     uint64_t                 u64BDLBase;
