Index: /trunk/src/VBox/Devices/Audio/DevHda.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHda.cpp	(revision 88502)
+++ /trunk/src/VBox/Devices/Audio/DevHda.cpp	(revision 88503)
@@ -667,4 +667,6 @@
 #endif /* IN_RING3 */
 
+#ifdef IN_RING3 /* Codec is not yet kosher enough for ring-0.  @bugref{9890c64} */
+
 /**
  * Synchronizes the CORB / RIRB buffers between internal <-> device state.
@@ -679,5 +681,5 @@
  * @todo r=andy Break this up into two functions?
  */
-static int hdaCmdSync(PPDMDEVINS pDevIns, PHDASTATE pThis, bool fLocal)
+static int hdaR3CmdSync(PPDMDEVINS pDevIns, PHDASTATE pThis, bool fLocal)
 {
     int rc = VINF_SUCCESS;
@@ -765,5 +767,5 @@
  * @param   pThisCC             The ring-0 HDA device state.
  */
-static int hdaCORBCmdProcess(PPDMDEVINS pDevIns, PHDASTATE pThis, PHDASTATECC pThisCC)
+static int hdaR3CORBCmdProcess(PPDMDEVINS pDevIns, PHDASTATE pThis, PHDASTATECC pThisCC)
 {
     Log3Func(("ENTER CORB(RP:%x, WP:%x) RIRBWP:%x\n", HDA_REG(pThis, CORBRP), HDA_REG(pThis, CORBWP), HDA_REG(pThis, RIRBWP)));
@@ -777,5 +779,5 @@
     Assert(pThis->cbCorbBuf);
 
-    int rc = hdaCmdSync(pDevIns, pThis, true /* Sync from guest */);
+    int rc = hdaR3CmdSync(pDevIns, pThis, true /* Sync from guest */);
     AssertRCReturn(rc, rc);
 
@@ -791,10 +793,4 @@
     uint8_t        corbRp       = HDA_REG(pThis, CORBRP);
     uint8_t        rirbWp       = HDA_REG(pThis, RIRBWP);
-
-#ifndef IN_RING3
-    /*
-     * Check t
-     */
-#endif
 
     /*
@@ -891,9 +887,11 @@
      * Write out the response.
      */
-    rc = hdaCmdSync(pDevIns, pThis, false /* Sync to guest */);
+    rc = hdaR3CmdSync(pDevIns, pThis, false /* Sync to guest */);
     AssertRC(rc);
 
     return rc;
 }
+
+#endif /* IN_RING3 - @bugref{9890c64} */
 
 #ifdef IN_RING3
@@ -909,5 +907,5 @@
 
     DEVHDA_LOCK(pDevIns, pThis);
-    hdaCORBCmdProcess(pDevIns, pThis, pThisCC);
+    hdaR3CORBCmdProcess(pDevIns, pThis, pThisCC);
     DEVHDA_UNLOCK(pDevIns, pThis);
 
@@ -1144,5 +1142,13 @@
 
     if (HDA_REG(pThis, CORBCTL) & HDA_CORBCTL_DMA) /* DMA engine started? */
-        rc = hdaCORBCmdProcess(pDevIns, pThis, PDMDEVINS_2_DATA_CC(pDevIns, PHDASTATECC));
+    {
+#ifdef IN_RING3 /** @todo do PDMDevHlpTaskTrigger everywhere? */
+        rc = hdaR3CORBCmdProcess(pDevIns, pThis, PDMDEVINS_2_DATA_CC(pDevIns, PHDASTATECC));
+#else
+        rc = PDMDevHlpTaskTrigger(pDevIns, pThis->hCorbDmaTask);
+        if (rc != VINF_SUCCESS && RT_SUCCESS(rc))
+            rc = VINF_SUCCESS;
+#endif
+    }
     else
         LogFunc(("CORB DMA not running, skipping\n"));
@@ -1211,5 +1217,10 @@
     AssertRCSuccess(VBOXSTRICTRC_VAL(rc));
 
-    return hdaCORBCmdProcess(pDevIns, pThis, PDMDEVINS_2_DATA_CC(pDevIns, PHDASTATECC));
+#ifdef IN_RING3 /** @todo do PDMDevHlpTaskTrigger everywhere? */
+    return hdaR3CORBCmdProcess(pDevIns, pThis, PDMDEVINS_2_DATA_CC(pDevIns, PHDASTATECC));
+#else
+    rc = PDMDevHlpTaskTrigger(pDevIns, pThis->hCorbDmaTask);
+    return RT_SUCCESS(rc) ? VINF_SUCCESS : rc;
+#endif
 }
 
@@ -5293,7 +5304,11 @@
     AssertRCReturn(rc, rc);
 
+# if 0 /* Codec is not yet kosher enough for ring-0.  @bugref{9890c64} */
     /* Construct the R0 codec part. */
     rc = hdaR0CodecConstruct(pDevIns, &pThis->Codec, &pThisCC->Codec);
     AssertRCReturn(rc, rc);
+# else
+    RT_NOREF(pThisCC);
+# endif
 
     return VINF_SUCCESS;
Index: /trunk/src/VBox/Devices/Audio/DevHda.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHda.h	(revision 88502)
+++ /trunk/src/VBox/Devices/Audio/DevHda.h	(revision 88503)
@@ -219,6 +219,10 @@
 typedef struct HDASTATER0
 {
+# if 0 /* Codec is not yet kosher enough for ring-0.  @bugref{9890c64} */
     /** Pointer to HDA codec to use. */
     HDACODECR0              Codec;
+# else
+    uint32_t                u32Dummy;
+# endif
 } HDASTATER0;
 /** Pointer to a ring-0 HDA device state.  */
Index: /trunk/src/VBox/Devices/Audio/DevHdaCodec.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHdaCodec.cpp	(revision 88502)
+++ /trunk/src/VBox/Devices/Audio/DevHdaCodec.cpp	(revision 88503)
@@ -2611,5 +2611,7 @@
      */
     PDMDevHlpSTAMRegister(pDevIns, &pThis->StatLookupsR3, STAMTYPE_COUNTER, "Codec/LookupsR0", STAMUNIT_OCCURENCES, "Number of R0 codecLookup calls");
+# if 0 /* Codec is not yet kosher enough for ring-0.  @bugref{9890c64} */
     PDMDevHlpSTAMRegister(pDevIns, &pThis->StatLookupsR0, STAMTYPE_COUNTER, "Codec/LookupsR3", STAMUNIT_OCCURENCES, "Number of R3 codecLookup calls");
+# endif
 
     return rc;
Index: /trunk/src/VBox/Devices/Audio/DevHdaCodec.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHdaCodec.h	(revision 88502)
+++ /trunk/src/VBox/Devices/Audio/DevHdaCodec.h	(revision 88503)
@@ -862,6 +862,8 @@
     uint8_t    au8Reserveds[CODEC_NODES_MAX];
 
+    STAMCOUNTER StatLookupsR3;
+#if 0 /* Codec is not yet kosher enough for ring-0.  @bugref{9890c64} */
     STAMCOUNTER StatLookupsR0;
-    STAMCOUNTER StatLookupsR3;
+#endif
 } HDACODEC;
 
Index: /trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Makefile.kmk	(revision 88502)
+++ /trunk/src/VBox/Devices/Makefile.kmk	(revision 88503)
@@ -1224,5 +1224,4 @@
  	Audio/DevHda.cpp \
  	Audio/DevHdaCommon.cpp \
- 	Audio/DevHdaCodec.cpp \
  	Audio/DevHdaStream.cpp \
  	Audio/DevIchAc97.cpp
