Index: trunk/src/VBox/HostDrivers/Support/SUPDRV.h
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPDRV.h	(revision 8788)
+++ trunk/src/VBox/HostDrivers/Support/SUPDRV.h	(revision 8789)
@@ -709,4 +709,6 @@
     /** GIP timer interval (ms). */
     ULONG                   ulGipTimerInterval;
+    /** Flag to force async GIP timer mode. */
+    BOOLEAN                 fForceAsyncTsc;
 #endif
 #ifdef RT_OS_LINUX
@@ -759,5 +761,5 @@
 void  VBOXCALL  supdrvOSGipSuspend(PSUPDRVDEVEXT pDevExt);
 unsigned VBOXCALL supdrvOSGetCPUCount(void);
-bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(void);
+bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt);
 #endif
 
Index: trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 8788)
+++ trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 8789)
@@ -45,4 +45,5 @@
 #include <iprt/cpuset.h>
 #include <iprt/log.h>
+#include <VBox/x86.h>
 
 /*
@@ -236,5 +237,5 @@
 static void     supdrvLdrFree(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage);
 static SUPPAGINGMODE supdrvIOCtl_GetPagingMode(void);
-static SUPGIPMODE supdrvGipDeterminTscMode(void);
+static SUPGIPMODE supdrvGipDeterminTscMode(PSUPDRVDEVEXT pDevExt);
 #ifdef RT_OS_WINDOWS
 static int      supdrvPageGetPhys(PSUPDRVSESSION pSession, RTR3PTR pvR3, uint32_t cPages, PRTHCPHYS paPages);
@@ -3850,5 +3851,5 @@
     pGip->u32Magic          = SUPGLOBALINFOPAGE_MAGIC;
     pGip->u32Version        = SUPGLOBALINFOPAGE_VERSION;
-    pGip->u32Mode           = supdrvGipDeterminTscMode();
+    pGip->u32Mode           = supdrvGipDeterminTscMode(pDevExt);
     pGip->u32UpdateHz       = uUpdateHz;
     pGip->u32UpdateIntervalNS = 1000000000 / uUpdateHz;
@@ -3892,6 +3893,7 @@
  *
  * @returns The most suitable TSC mode.
- */
-static SUPGIPMODE supdrvGipDeterminTscMode(void)
+ * @param   pDevExt     Pointer to the device instance data.
+ */
+static SUPGIPMODE supdrvGipDeterminTscMode(PSUPDRVDEVEXT pDevExt)
 {
 #ifndef USE_NEW_OS_INTERFACE_FOR_GIP
@@ -3912,10 +3914,13 @@
 
         /* Permit user users override. */
-        if (supdrvOSGetForcedAsyncTscMode())
+        if (supdrvOSGetForcedAsyncTscMode(pDevExt))
             return SUPGIPMODE_ASYNC_TSC;
 
         /* Check for "AuthenticAMD" */
         ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX);
-        if (uEAX >= 1 && uEBX == 0x68747541 && uECX == 0x444d4163 && uEDX == 0x69746e65)
+        if (    uEAX >= 1 
+            &&  uEBX == X86_CPUID_VENDOR_AMD_EBX 
+            &&  uECX == X86_CPUID_VENDOR_AMD_ECX 
+            &&  uEDX == X86_CPUID_VENDOR_AMD_EDX)
         {
             /* Check for APM support and that TscInvariant is cleared. */
Index: trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
===================================================================
--- trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 8788)
+++ trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 8789)
@@ -1405,5 +1405,5 @@
  * @todo add a module argument for this.
  */
-bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(void)
+bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
 {
     return force_async_tsc != 0;
Index: trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
===================================================================
--- trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp	(revision 8788)
+++ trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp	(revision 8789)
@@ -120,4 +120,6 @@
         if (NT_SUCCESS(rc))
         {
+            uint64_t  u64DiffCores;
+
             /*
              * Initialize the device extension.
@@ -125,4 +127,9 @@
             PSUPDRVDEVEXT pDevExt = (PSUPDRVDEVEXT)pDevObj->DeviceExtension;
             memset(pDevExt, 0, sizeof(*pDevExt));
+
+            /* Make sure the tsc is consistent across cpus/cores. */
+            pDevExt->fForceAsyncTsc = supdrvDetermineAsyncTsc(&u64DiffCores);
+            dprintf(("supdrvDetermineAsyncTsc: fAsync=%d u64DiffCores=%u.\n", pDevExt->fForceAsyncTsc, (uint32_t)u64DiffCores));
+
             int vrc = supdrvInitDevExt(pDevExt);
             if (!vrc)
@@ -767,7 +774,7 @@
  * Force async tsc mode (stub).
  */
-bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(void)
-{
-    return false;
+bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
+{
+    return pDevExt->fForceAsyncTsc != 0;
 }
 
