Index: /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp	(revision 19969)
+++ /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemption.cpp	(revision 19970)
@@ -98,24 +98,28 @@
                 if (ASMGetFlags() & X86_EFL_IF)
                 {
-                    uint64_t    u64StartTS    = RTTimeSystemNanoTS();
+                    uint64_t    u64StartSysTS = RTTimeSystemNanoTS();
+                    uint64_t    u64StartTS    = RTTimeNanoTS();
                     uint64_t    cLoops        = 0;
+                    uint64_t    cNanosSysElapsed;
                     uint64_t    cNanosElapsed;
                     bool        fPending;
                     do
                     {
-                        fPending = RTThreadPreemptIsPending(NIL_RTTHREAD);
-                        cNanosElapsed = RTTimeSystemNanoTS() - u64StartTS;
+                        fPending         = RTThreadPreemptIsPending(NIL_RTTHREAD);
+                        cNanosElapsed    = RTTimeNanoTS() - u64StartTS;
+                        cNanosSysElapsed = RTTimeSystemNanoTS() - u64StartSysTS;
                         cLoops++;
                     } while (   !fPending
-                             && cNanosElapsed < UINT64_C(2)*1000U*1000U*1000U
-                             && cLoops < 100U*_1M);
+                             && cNanosElapsed    < UINT64_C(2)*1000U*1000U*1000U
+                             && cNanosSysElapsed < UINT64_C(2)*1000U*1000U*1000U
+                             && cLoops           < 100U*_1M);
                     if (!fPending)
-                        RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %'llu loops / %'llu ns",
-                                    cLoops, cNanosElapsed);
+                        RTStrPrintf(pszErr, cchErr, "!Preempt not pending after %'llu loops / %'llu ns / %'llu ns (sys)",
+                                    cLoops, cNanosElapsed, cNanosSysElapsed);
                     else if (cLoops == 1)
-                        RTStrPrintf(pszErr, cchErr, "!cLoops=0\n");
+                        RTStrPrintf(pszErr, cchErr, "!cLoops=1\n");
                     else
-                        RTStrPrintf(pszErr, cchErr, "RTThreadPreemptIsPending returned true after %'llu loops / %'llu ns",
-                                    cLoops, cNanosElapsed);
+                        RTStrPrintf(pszErr, cchErr, "RTThreadPreemptIsPending returned true after %'llu loops / %'llu ns / %'llu ns (sys)",
+                                    cLoops, cNanosElapsed, cNanosSysElapsed);
                 }
                 else
Index: /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp	(revision 19969)
+++ /trunk/src/VBox/Runtime/testcase/tstR0ThreadPreemptionDriver.cpp	(revision 19970)
@@ -145,5 +145,5 @@
         return RTTestSummaryAndDestroy(hTest);
     if (Req.szMsg[0] == '!')
-    {    
+    {
         RTTestIFailed("%s", &Req.szMsg[1]);
         return RTTestSummaryAndDestroy(hTest);
@@ -163,5 +163,5 @@
         RTTESTI_CHECK_RC(rc = SUPR3CallR0Service("tstR0ThreadPreemption", sizeof("tstR0ThreadPreemption") - 1,
                                                  TSTR0THREADPREMEPTION_IS_PENDING, 0, &Req.Hdr), VINF_SUCCESS);
-        if (    strcmp(Req.szMsg, "cLoops=0\n")
+        if (    strcmp(Req.szMsg, "cLoops=1\n")
             ||  i >= 64)
         {
@@ -177,5 +177,5 @@
 
     /*
-     * Stay in ring-0 until preemption is pending.
+     * Test nested RTThreadPreemptDisable calls.
      */
     RTTestSub(hTest, "Nested");
