Index: /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp	(revision 19935)
+++ /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp	(revision 19936)
@@ -82,4 +82,6 @@
             if (RTThreadPreemptIsEnabled(NIL_RTTHREAD))
                 RTStrPrintf(pszErr, cchErr, "!RTThreadPreemptIsEnabled returns true after RTThreadPreemptDisable");
+            else if (!(ASMGetFlags() & X86_EFL_IF))
+                RTStrPrintf(pszErr, cchErr, "!Interrupts disabled");
             RTThreadPreemptRestore(&State);
             break;
@@ -88,5 +90,4 @@
         case TSTR0THREADPREMEPTION_IS_PENDING:
         {
-            /* This isn't 100% proof... */
             RTTHREADPREEMPTSTATE State = RTTHREADPREEMPTSTATE_INITIALIZER;
             RTThreadPreemptDisable(&State);
@@ -106,9 +107,11 @@
                     } while (   !fPending
                              && cNanosElapsed < UINT64_C(60)*1000U*1000U*1000U);
-                    if (fPending)
+                    if (!fPending)
+                        RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %llu loops / %llu ns\n",
+                                    cLoops, cNanosElapsed);
+                    else if (cLoops == 1)
+                        RTStrPrintf(pszErr, cchErr, "!cLoops=0\n");
+                    else
                         RTStrPrintf(pszErr, cchErr, "RTThreadPreemptIsPending returned true after %llu loops / %llu ns\n",
-                                    cLoops, cNanosElapsed);
-                    else
-                        RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %llu loops / %llu ns\n",
                                     cLoops, cNanosElapsed);
                 }
Index: /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp	(revision 19935)
+++ /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp	(revision 19936)
@@ -40,4 +40,5 @@
 #include <iprt/string.h>
 #include <iprt/test.h>
+#include <iprt/thread.h>
 #ifdef VBOX
 # include <VBox/sup.h>
@@ -153,12 +154,22 @@
      */
     RTTestSub(hTest, "Pending Preemption");
-    Req.Hdr.u32Magic = SUPR0SERVICEREQHDR_MAGIC;
-    Req.Hdr.cbReq = sizeof(Req);
-    Req.szMsg[0] = '\0';
-    RTTESTI_CHECK_RC(rc = SUPR3CallR0Service("tstR0ThreadPreemption", sizeof("tstR0ThreadPreemption") - 1,
-                                             TSTR0THREADPREMEPTION_IS_PENDING, 0, &Req.Hdr), VINF_SUCCESS);
-    RTTESTI_CHECK_MSG(Req.szMsg[0] != '!', ("%s", Req.szMsg));
-    if (Req.szMsg[0])
-        RTTestIPrintf(RTTESTLVL_ALWAYS, "%s", Req.szMsg);
+    for (int i = 0; ; i++)
+    {
+        Req.Hdr.u32Magic = SUPR0SERVICEREQHDR_MAGIC;
+        Req.Hdr.cbReq = sizeof(Req);
+        Req.szMsg[0] = '\0';
+        RTTESTI_CHECK_RC(rc = SUPR3CallR0Service("tstR0ThreadPreemption", sizeof("tstR0ThreadPreemption") - 1,
+                                                 TSTR0THREADPREMEPTION_IS_PENDING, 0, &Req.Hdr), VINF_SUCCESS);
+        if (    strcmp(Req.szMsg, "cLoops=0\n")
+            ||  i >= 64)
+        {
+            RTTESTI_CHECK_MSG(Req.szMsg[0] != '!', ("%s", Req.szMsg));
+            if (Req.szMsg[0])
+                RTTestIPrintf(RTTESTLVL_ALWAYS, "%s", Req.szMsg);
+            break;
+        }
+        if ((i % 3) == 0)
+            RTThreadYield();
+    }
 
     /*
