Index: /trunk/src/VBox/HostDrivers/Support/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/Makefile.kmk	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/Makefile.kmk	(revision 9470)
@@ -181,5 +181,5 @@
 ifeq ($(KBUILD_TARGET),linux)
 vboxdrv_TEMPLATE      = VBOXR0DRV
-vboxdrv_DEFS          = KBUILD_MODNAME=KBUILD_STR\(vboxdrv\) KBUILD_BASENAME=KBUILD_STR\(vboxdrv\) MODULE IN_RT_R0 IN_SUP_R0 CONFIG_VBOXDRV_AS_MISC USE_NEW_OS_INTERFACE_FOR_MM
+vboxdrv_DEFS          = KBUILD_MODNAME=KBUILD_STR\(vboxdrv\) KBUILD_BASENAME=KBUILD_STR\(vboxdrv\) MODULE IN_RT_R0 IN_SUP_R0 CONFIG_VBOXDRV_AS_MISC USE_NEW_OS_INTERFACE_FOR_MM USE_NEW_OS_INTERFACE_FOR_GIP
 ifdef VBOX_WITH_IDT_PATCHING
 vboxdrv_DEFS         += VBOX_WITH_IDT_PATCHING
Index: /trunk/src/VBox/HostDrivers/Support/SUPDRV.h
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDRV.h	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDRV.h	(revision 9470)
@@ -697,6 +697,9 @@
     /** If non-zero we've successfully called RTTimerRequestSystemGranularity(). */
     uint32_t                u32SystemTimerGranularityGrant;
-#endif
-#ifdef RT_OS_WINDOWS
+    /** The CPU id of the GIP master.
+     * This CPU is responsible for the updating the common GIP data. */
+    RTCPUID volatile        idGipMaster;
+#else
+# ifdef RT_OS_WINDOWS
     /** The GIP timer object. */
     KTIMER                  GipTimer;
@@ -713,6 +716,6 @@
     /** Current CPU affinity mask. */
     KAFFINITY               uAffinityMask;
-#endif
-#ifdef RT_OS_LINUX
+# endif
+# ifdef RT_OS_LINUX
     /** The last jiffies. */
     unsigned long           ulLastJiffies;
@@ -721,5 +724,5 @@
     /** Set when GIP is suspended to prevent the timers from re-registering themselves). */
     uint8_t volatile        fGIPSuspended;
-# ifdef CONFIG_SMP
+#  ifdef CONFIG_SMP
     /** Array of per CPU data for SUPGIPMODE_ASYNC_TSC. */
     struct LINUXCPU
@@ -734,6 +737,7 @@
         VBOXKTIMER          Timer;
     }                       aCPUs[256];
-# endif
-#endif
+#  endif
+# endif /* LINUX */
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
 } SUPDRVDEVEXT;
 
@@ -762,7 +766,9 @@
 void  VBOXCALL  supdrvOSGipResume(PSUPDRVDEVEXT pDevExt);
 void  VBOXCALL  supdrvOSGipSuspend(PSUPDRVDEVEXT pDevExt);
+#endif
+#ifdef RT_OS_WINDOWS /** @todo remove when RTMpGetCount() has been fixed. */
 unsigned VBOXCALL supdrvOSGetCPUCount(PSUPDRVDEVEXT pDevExt);
+#endif
 bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt);
-#endif
 
 
Index: /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 9470)
@@ -253,5 +253,7 @@
 static int      supdrvGipCreate(PSUPDRVDEVEXT pDevExt);
 static void     supdrvGipDestroy(PSUPDRVDEVEXT pDevExt);
-static DECLCALLBACK(void) supdrvGipTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
+static DECLCALLBACK(void) supdrvGipSyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
+static DECLCALLBACK(void) supdrvGipAsyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
+static DECLCALLBACK(void) supdrvGipMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser);
 #endif
 
@@ -3748,6 +3750,5 @@
 
     /*
-     * Find a reasonable update interval, something close to 10ms would be nice,
-     * and create a recurring timer.
+     * Find a reasonable update interval and initialize the structure.
      */
     u32Interval = u32SystemResolution = RTTimerGetSystemGranularity();
@@ -3755,18 +3756,43 @@
         u32Interval += u32SystemResolution;
 
-    rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, 0, supdrvGipTimer, pDevExt);
-    if (RT_FAILURE(rc))
-    {
-        OSDBGPRINT(("supdrvGipCreate: failed create GIP timer at %RU32 ns interval. rc=%d\n", u32Interval, rc));
+    supdrvGipInit(pDevExt, pGip, HCPhysGip, RTTimeSystemNanoTS(), 1000000000 / u32Interval /*=Hz*/);
+
+    /*
+     * Create the timer.
+     * If CPU_ALL isn't supported we'll have to fall back to synchronous mode.
+     */
+    if (pGip->u32Mode == SUPGIPMODE_ASYNC_TSC)
+    {
+        rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, RTTIMER_FLAGS_CPU_ALL, supdrvGipAsyncTimer, pDevExt);
+        if (rc == VERR_NOT_SUPPORTED)
+        {
+            OSDBGPRINT(("supdrvGipCreate: omni timer not supported, falling back to synchronous mode\n"));
+            pGip->u32Mode = SUPGIPMODE_SYNC_TSC;
+        }
+    }
+    if (pGip->u32Mode != SUPGIPMODE_ASYNC_TSC)
+        rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, 0, supdrvGipSyncTimer, pDevExt);
+    if (RT_SUCCESS(rc))
+    {
+        if (pGip->u32Mode == SUPGIPMODE_ASYNC_TSC)
+            rc = RTMpNotificationRegister(supdrvGipMpEvent, pDevExt);
+        if (RT_SUCCESS(rc))
+        {
+            /*
+             * We're good.
+             */
+            dprintf(("supdrvGipCreate: %ld ns interval.\n", (long)u32Interval));
+            return VINF_SUCCESS;
+        }
+
+        OSDBGPRINT(("supdrvGipCreate: failed register MP event notfication. rc=%d\n", rc));
+    }
+    else
+    {
+        OSDBGPRINT(("supdrvGipCreate: failed create GIP timer at %ld ns interval. rc=%d\n", (long)u32Interval, rc));
         Assert(!pDevExt->pGipTimer);
-        supdrvGipDestroy(pDevExt);
-        return rc;
-    }
-
-    /*
-     * We're good.
-     */
-    supdrvGipInit(pDevExt, pGip, HCPhysGip, RTTimeSystemNanoTS(), 1000000000 / u32Interval /*=Hz*/);
-    return VINF_SUCCESS;
+    }
+    supdrvGipDestroy(pDevExt);
+    return rc;
 }
 
@@ -3822,15 +3848,79 @@
 
 /**
- * Timer callback function.
+ * Timer callback function sync GIP mode.
  * @param   pTimer      The timer.
  * @param   pvUser      The device extension.
- * @param   iTick       The current tick.
- */
-static DECLCALLBACK(void) supdrvGipTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
+ */
+static DECLCALLBACK(void) supdrvGipSyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
 {
     PSUPDRVDEVEXT pDevExt  = (PSUPDRVDEVEXT)pvUser;
     supdrvGipUpdate(pDevExt->pGip, RTTimeSystemNanoTS());
-    NOREF(iTick);
-}
+}
+
+
+/**
+ * Timer callback function for async GIP mode.
+ * @param   pTimer      The timer.
+ * @param   pvUser      The device extension.
+ */
+static DECLCALLBACK(void) supdrvGipAsyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
+{
+    PSUPDRVDEVEXT   pDevExt = (PSUPDRVDEVEXT)pvUser;
+    RTCPUID         idCpu   = RTMpCpuId();
+    uint64_t        NanoTS  = RTTimeSystemNanoTS();
+
+    if (pDevExt->idGipMaster == idCpu)
+        supdrvGipUpdate(pDevExt->pGip, NanoTS);
+    else
+        supdrvGipUpdatePerCpu(pDevExt->pGip, NanoTS, ASMGetApicId());
+}
+
+
+/**
+ * Multiprocessor event notification callback.
+ *
+ * This is used to make sue that the GIP master gets passed on to
+ * another CPU.
+ *
+ * @param   enmEvent    The event.
+ * @param   idCpu       The cpu it applies to.
+ * @param   pvUser      Pointer to the device extension.
+ */
+static DECLCALLBACK(void) supdrvGipMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser)
+{
+    PSUPDRVDEVEXT   pDevExt = (PSUPDRVDEVEXT)pvUser;
+    if (enmEvent == RTMPEVENT_OFFLINE)
+    {
+        RTCPUID idGipMaster;
+        ASMAtomicReadSize(&pDevExt->idGipMaster, &idGipMaster);
+        if (idGipMaster == idCpu)
+        {
+            /*
+             * Find a new GIP master.
+             */
+            bool        fIgnored;
+            unsigned    i;
+            RTCPUID     idNewGipMaster = NIL_RTCPUID;
+            RTCPUSET    OnlineCpus;
+            RTMpGetOnlineSet(&OnlineCpus);
+
+            for (i = 0; i < RTCPUSET_MAX_CPUS; i++)
+            {
+                RTCPUID idCurCpu = RTMpCpuIdFromSetIndex(i);
+                if (    RTCpuSetIsMember(&OnlineCpus, idCurCpu)
+                    &&  idCurCpu != idGipMaster)
+                {
+                    idNewGipMaster = idCurCpu;
+                    break;
+                }
+            }
+
+            dprintf(("supdrvGipMpEvent: Gip master %#lx -> %#lx\n", (long)idGipMaster, (long)idNewGipMaster));
+            ASMAtomicCmpXchgSize(&pDevExt->idGipMaster, idNewGipMaster, idGipMaster, fIgnored);
+            NOREF(fIgnored);
+        }
+    }
+}
+
 #endif /* USE_NEW_OS_INTERFACE_FOR_GIP */
 
@@ -3907,5 +3997,4 @@
 static SUPGIPMODE supdrvGipDeterminTscMode(PSUPDRVDEVEXT pDevExt)
 {
-#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
     /*
      * The problem here is that AMD processors with power management features
@@ -3919,11 +4008,17 @@
      * can be relied upon to have somewhat uniform TSC between the cpus.
      */
+# ifdef RT_OS_WINDOWS /** @todo fix RTMpGetCount() wrt to IRQL. */
     if (supdrvOSGetCPUCount(pDevExt) > 1)
+# else
+    if (RTMpGetCount() > 1)
+# endif
     {
         uint32_t uEAX, uEBX, uECX, uEDX;
 
-        /* Permit user users override. */
+        /* Permit the user and/or the OS specfic bits to force async mode. */
         if (supdrvOSGetForcedAsyncTscMode(pDevExt))
             return SUPGIPMODE_ASYNC_TSC;
+
+        /** @todo perform supdrvDetermineAsyncTsc here! */
 
         /* Check for "AuthenticAMD" */
@@ -3934,4 +4029,6 @@
             &&  uEDX == X86_CPUID_VENDOR_AMD_EDX)
         {
+            /** @todo This is probably wrong. TscInvariant doesn't seem to mean that RdTSC returns the
+             * value everywhere, but rather that the rate is supposed to be the same. */
             /* Check for APM support and that TscInvariant is cleared. */
             ASMCpuId(0x80000000, &uEAX, &uEBX, &uECX, &uEDX);
@@ -3945,5 +4042,4 @@
         }
     }
-#endif
     return SUPGIPMODE_SYNC_TSC;
 }
Index: /trunk/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c	(revision 9470)
@@ -531,4 +531,9 @@
 }
 
+bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
+{
+    return false;
+}
+
 
 SUPR0DECL(int) SUPR0Printf(const char *pszFormat, ...)
Index: /trunk/src/VBox/HostDrivers/Support/linux/Makefile
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/linux/Makefile	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/linux/Makefile	(revision 9470)
@@ -75,7 +75,9 @@
 	r0drv/alloc-r0drv.o \
 	r0drv/initterm-r0drv.o \
-	r0drv/linux/mp-r0drv-linux.o \
+	r0drv/mpnotification-r0drv.o \
 	r0drv/linux/alloc-r0drv-linux.o \
 	r0drv/linux/initterm-r0drv-linux.o \
+	r0drv/linux/mp-r0drv-linux.o \
+	r0drv/linux/mpnotification-r0drv-linux.o \
 	r0drv/linux/process-r0drv-linux.o \
 	r0drv/linux/semevent-r0drv-linux.o \
@@ -83,5 +85,8 @@
 	r0drv/linux/semfastmutex-r0drv-linux.o \
 	r0drv/linux/spinlock-r0drv-linux.o \
-	r0drv/linux/thread-r0drv-linux.o
+	r0drv/linux/thread-r0drv-linux.o \
+	r0drv/linux/time-r0drv-linux.o \
+	r0drv/linux/timer-r0drv-linux.o \
+	common/err/RTErrConvertFromErrno.o
 ifeq ($(BUILD_TARGET_ARCH),amd64)
 OBJS  += alloc/heapsimple.o
@@ -223,5 +228,5 @@
 # If this makes testboxes crash/burn/leak disable it and add a comment to defect #2116.
 #
-KFLAGS += -DUSE_NEW_OS_INTERFACE_FOR_MM
+KFLAGS += -DUSE_NEW_OS_INTERFACE_FOR_MM -DUSE_NEW_OS_INTERFACE_FOR_GIP
 OBJS += r0drv/memobj-r0drv.o \
 	r0drv/linux/memobj-r0drv-linux.o
Index: /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c	(revision 9470)
@@ -1,3 +1,3 @@
-/* $Rev:$ */
+/* $Rev$ */
 /** @file
  * The VirtualBox Support Driver - Linux hosts.
@@ -199,7 +199,20 @@
 #define str(s) #s
 
+
 /*******************************************************************************
-*   Defined Constants And Macros                                               *
+*   Structures and Typedefs                                                    *
 *******************************************************************************/
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
+# ifdef VBOX_HRTIMER
+typedef enum hrtimer_restart (*PFNVBOXKTIMER)(struct hrtimer *);
+# else
+typedef void (*PFNVBOXKTIMER)(unsigned long);
+# endif
+#endif
+
+
+/*******************************************************************************
+*   Global Variables                                                           *
+*******************************************************************************/
 /**
  * Device extention & session data association structure.
@@ -207,8 +220,10 @@
 static SUPDRVDEVEXT         g_DevExt;
 
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
 /** Timer structure for the GIP update. */
 static VBOXKTIMER           g_GipTimer;
 /** Pointer to the page structure for the GIP. */
 struct page                *g_pGipPage;
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
 
 /** Registered devfs device handle. */
@@ -254,10 +269,4 @@
 *   Internal Functions                                                         *
 *******************************************************************************/
-#ifdef VBOX_HRTIMER
-typedef enum hrtimer_restart (*PFNVBOXKTIMER)(struct hrtimer *);
-#else
-typedef void (*PFNVBOXKTIMER)(unsigned long);
-#endif
-
 static int      VBoxDrvLinuxInit(void);
 static void     VBoxDrvLinuxUnload(void);
@@ -270,19 +279,21 @@
 #endif
 static int      VBoxDrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
 static int      VBoxDrvLinuxInitGip(PSUPDRVDEVEXT pDevExt);
 static int      VBoxDrvLinuxTermGip(PSUPDRVDEVEXT pDevExt);
-#ifdef VBOX_HRTIMER
+# ifdef VBOX_HRTIMER
 static enum hrtimer_restart VBoxDrvLinuxGipTimer(struct hrtimer *pTimer);
-#else
+# else
 static void     VBoxDrvLinuxGipTimer(unsigned long ulUser);
-#endif
-#ifdef CONFIG_SMP
-# ifdef VBOX_HRTIMER
+# endif
+# ifdef CONFIG_SMP
+#  ifdef VBOX_HRTIMER
 static enum hrtimer_restart VBoxDrvLinuxGipTimerPerCpu(struct hrtimer *pTimer);
-# else
+#  else
 static void     VBoxDrvLinuxGipTimerPerCpu(unsigned long ulUser);
-# endif
+#  endif
 static void     VBoxDrvLinuxGipResumePerCpu(void *pvUser);
-#endif
+# endif /* CONFIG_SMP */
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
 static int      VBoxDrvLinuxErr2LinuxErr(int);
 
@@ -315,4 +326,7 @@
 #endif
 
+
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
+
 static inline void vbox_ktimer_init(PVBOXKTIMER pTimer, PFNVBOXKTIMER pfnFunction, unsigned long ulData)
 {
@@ -346,4 +360,7 @@
 #endif
 }
+
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
+
 
 #ifdef CONFIG_X86_LOCAL_APIC
@@ -641,38 +658,45 @@
         if (RT_SUCCESS(rc))
         {
+            rc = RTR0MpNotificationInit(NULL);
+            if (RT_SUCCESS(rc))
+            {
 #ifdef RT_ARCH_AMD64
-            rc = RTR0MemExecDonate(&g_abExecMemory[0], sizeof(g_abExecMemory));
-#endif
-            /*
-             * Initialize the device extension.
-             */
-            if (RT_SUCCESS(rc))
-                rc = supdrvInitDevExt(&g_DevExt);
-            if (!rc)
-            {
+                rc = RTR0MemExecDonate(&g_abExecMemory[0], sizeof(g_abExecMemory));
+#endif
                 /*
-                 * Create the GIP page.
+                 * Initialize the device extension.
                  */
-                rc = VBoxDrvLinuxInitGip(&g_DevExt);
+                if (RT_SUCCESS(rc))
+                    rc = supdrvInitDevExt(&g_DevExt);
                 if (!rc)
                 {
-                    printk(KERN_INFO DEVICE_NAME ": TSC mode is %s, kernel timer mode is "
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
+                    /*
+                     * Create the GIP page.
+                     */
+                    rc = VBoxDrvLinuxInitGip(&g_DevExt);
+                    if (!rc)
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
+                    {
+                        printk(KERN_INFO DEVICE_NAME ": TSC mode is %s, kernel timer mode is "
 #ifdef VBOX_HRTIMER
-                           "'high-res'"
-#else
-                           "'normal'"
-#endif
-                           ".\n",
-                           g_DevExt.pGip->u32Mode == SUPGIPMODE_SYNC_TSC ? "'synchronous'" : "'asynchronous'");
-                    LogFlow(("VBoxDrv::ModuleInit returning %#x\n", rc));
-                    printk(KERN_DEBUG DEVICE_NAME ": Successfully loaded version "
-                           VBOX_VERSION_STRING " (interface " xstr(SUPDRVIOC_VERSION) ").\n");
-                    return rc;
+                               "'high-res'"
+#else
+                               "'normal'"
+#endif
+                               ".\n",
+                               g_DevExt.pGip->u32Mode == SUPGIPMODE_SYNC_TSC ? "'synchronous'" : "'asynchronous'");
+                        LogFlow(("VBoxDrv::ModuleInit returning %#x\n", rc));
+                        printk(KERN_DEBUG DEVICE_NAME ": Successfully loaded version "
+                               VBOX_VERSION_STRING " (interface " xstr(SUPDRVIOC_VERSION) ").\n");
+                        return rc;
+                    }
+
+                    supdrvDeleteDevExt(&g_DevExt);
                 }
-
-                supdrvDeleteDevExt(&g_DevExt);
+                else
+                    rc = -EINVAL;
+                RTR0MpNotificationTerm(NULL);
             }
-            else
-                rc = -EINVAL;
             RTR0Term();
         }
@@ -730,5 +754,7 @@
      * Destroy GIP, delete the device extension and terminate IPRT.
      */
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
     VBoxDrvLinuxTermGip(&g_DevExt);
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
     supdrvDeleteDevExt(&g_DevExt);
     RTR0Term();
@@ -947,4 +973,6 @@
 }
 
+
+#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
 
 /**
@@ -1365,28 +1393,7 @@
 }
 
-
-/**
- * Get the current CPU count.
- * @returns Number of cpus.
- */
-unsigned VBOXCALL supdrvOSGetCPUCount(PSUPDRVDEVEXT pDevExt)
-{
-#ifdef CONFIG_SMP
-# if defined(num_present_cpus) && !defined(VBOX_REDHAT_KABI)
-    return num_present_cpus();
-# elif defined(num_possible_cpus)
-    return num_possible_cpus();
-# else
-    return smp_num_cpus;
-# endif
-#else
-    return 1;
-#endif
-}
-
-/**
- * Force async tsc mode.
- * @todo add a module argument for this.
- */
+#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
+
+
 bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
 {
@@ -1475,5 +1482,5 @@
 
 
-/* GCC C++ hack. */
+/* GCC C++ hack. (shouldn't be necessary...) */
 unsigned __gxx_personality_v0 = 0xcccccccc;
 
Index: /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv	(revision 9469)
+++ /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv	(revision 9470)
@@ -64,4 +64,5 @@
     ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDRVShared.c=>SUPDRVShared.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/alloc/heapsimple.cpp=>alloc/heapsimple.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logcom.cpp=>common/log/logcom.c \
@@ -89,4 +90,6 @@
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/alloc-r0drv.h=>r0drv/alloc-r0drv.h \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/initterm-r0drv.cpp=>r0drv/initterm-r0drv.c \
+    ${PATH_ROOT}/src/VBox/Runtime/r0drv/mp-r0drv.h=>r0drv/mp-r0drv.h \
+    ${PATH_ROOT}/src/VBox/Runtime/r0drv/mpnotification-r0drv.c=>r0drv/mpnotification-r0drv.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/RTLogWriteDebugger-r0drv-linux.c=>r0drv/linux/RTLogWriteDebugger-r0drv-linux.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c=>r0drv/linux/alloc-r0drv-linux.c \
@@ -94,5 +97,5 @@
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c=>r0drv/linux/memobj-r0drv-linux.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c=>r0drv/linux/mp-r0drv-linux.c \
-    ${PATH_ROOT}/src/VBox/Runtime/r0drv/mp-r0drv.h=>r0drv/mp-r0drv.h \
+    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/mpnotification-r0drv-linux.c=>r0drv/linux/mpnotification-r0drv-linux.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/process-r0drv-linux.c=>r0drv/linux/process-r0drv-linux.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/semevent-r0drv-linux.c=>r0drv/linux/semevent-r0drv-linux.c \
@@ -103,4 +106,6 @@
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h=>r0drv/linux/the-linux-kernel.h \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/thread-r0drv-linux.c=>r0drv/linux/thread-r0drv-linux.c \
+    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/time-r0drv-linux.c=>r0drv/linux/time-r0drv-linux.c \
+    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c=>r0drv/linux/timer-r0drv-linux.c \
     ${PATH_ROOT}/src/VBox/Runtime/r0drv/memobj-r0drv.cpp=>r0drv/memobj-r0drv.c \
     ${PATH_ROOT}/src/VBox/Runtime/VBox/log-vbox.cpp=>VBox/log-vbox.c \
