Index: /trunk/src/VBox/Main/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 32897)
+++ /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 32898)
@@ -1841,6 +1841,4 @@
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
 
-    /** @todo r=klaus holding the lock while triggering VMMDev/EMT activity is
-     * asking for deadlocks. Code MUST drop any lock before touching VMMDev. */
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
@@ -1868,4 +1866,7 @@
                         tr("CPU %d is not attached"), aCpu);
 
+    /* Leave the lock before any EMT/VMMDev call. */
+    alock.leave();
+
     /* Check if the CPU is unlocked */
     PPDMIBASE pBase;
@@ -1913,6 +1914,5 @@
         /*
          * Call worker in EMT, that's faster and safer than doing everything
-         * using VMR3ReqCall. Note that we separate VMR3ReqCall from VMR3ReqWait
-         * here to make requests from under the lock in order to serialize them.
+         * using VMR3ReqCall.
          */
         PVMREQ pReq;
@@ -1921,7 +1921,4 @@
                           this, aCpu);
 
-        /* leave the lock before a VMR3* call (EMT will call us back)! */
-        alock.leave();
-
         if (vrc == VERR_TIMEOUT || RT_SUCCESS(vrc))
         {
@@ -1999,6 +1996,4 @@
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
 
-    /** @todo r=klaus holding the lock while triggering VMMDev/EMT activity is
-     * asking for deadlocks. Code MUST drop any lock before touching VMMDev. */
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
@@ -3880,6 +3875,4 @@
     AssertComRCReturnRC(autoCaller.rc());
 
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
     HRESULT rc = S_OK;
 
@@ -3887,8 +3880,4 @@
     if (mpVM)
     {
-        /* protect mpVM */
-        AutoVMCaller autoVMCaller(this);
-        if (FAILED(autoVMCaller.rc())) return autoVMCaller.rc();
-
         if (aRemove)
             rc = doCPURemove(aCPU);
