Index: /trunk/src/VBox/Devices/Input/DevPS2M.cpp
===================================================================
--- /trunk/src/VBox/Devices/Input/DevPS2M.cpp	(revision 87819)
+++ /trunk/src/VBox/Devices/Input/DevPS2M.cpp	(revision 87820)
@@ -716,4 +716,6 @@
 static uint32_t ps2mR3HaveEvents(PPS2M pThis)
 {
+/** @todo r=bird: Why is this returning uint32_t when you're calculating a
+ *        boolean value here?  Also, it's a predicate function... */
     return   pThis->iAccumX || pThis->iAccumY || pThis->iAccumZ || pThis->iAccumW
            || ((pThis->fCurrB | pThis->fAccumB) != pThis->fReportedB);
@@ -729,8 +731,5 @@
     uint32_t    uHaveEvents;
     Assert(hTimer == pThis->hThrottleTimer);
-
-    /* Grab the lock to avoid races with PutEvent(). */
-    int rc = PDMDevHlpCritSectEnter(pDevIns, pDevIns->pCritSectRoR3, VERR_SEM_BUSY);
-    AssertReleaseRC(rc);
+    Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->pCritSectRoR3));
 
     /* If more movement is accumulated, report it and restart the timer. */
@@ -747,6 +746,4 @@
     else
         pThis->fThrottleActive = false;
-
-    PDMDevHlpCritSectLeave(pDevIns, pDevIns->pCritSectRoR3);
 }
 
