VirtualBox

Changeset 9470 in vbox


Ignore:
Timestamp:
Jun 6, 2008 12:19:12 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31727
Message:

Generic timer code for async GIP mode.

Location:
trunk/src/VBox/HostDrivers/Support
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r9218 r9470  
    181181ifeq ($(KBUILD_TARGET),linux)
    182182vboxdrv_TEMPLATE      = VBOXR0DRV
    183 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
     183vboxdrv_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
    184184ifdef VBOX_WITH_IDT_PATCHING
    185185vboxdrv_DEFS         += VBOX_WITH_IDT_PATCHING
  • trunk/src/VBox/HostDrivers/Support/SUPDRV.h

    r8837 r9470  
    697697    /** If non-zero we've successfully called RTTimerRequestSystemGranularity(). */
    698698    uint32_t                u32SystemTimerGranularityGrant;
    699 #endif
    700 #ifdef RT_OS_WINDOWS
     699    /** The CPU id of the GIP master.
     700     * This CPU is responsible for the updating the common GIP data. */
     701    RTCPUID volatile        idGipMaster;
     702#else
     703# ifdef RT_OS_WINDOWS
    701704    /** The GIP timer object. */
    702705    KTIMER                  GipTimer;
     
    713716    /** Current CPU affinity mask. */
    714717    KAFFINITY               uAffinityMask;
    715 #endif
    716 #ifdef RT_OS_LINUX
     718# endif
     719# ifdef RT_OS_LINUX
    717720    /** The last jiffies. */
    718721    unsigned long           ulLastJiffies;
     
    721724    /** Set when GIP is suspended to prevent the timers from re-registering themselves). */
    722725    uint8_t volatile        fGIPSuspended;
    723 # ifdef CONFIG_SMP
     726#  ifdef CONFIG_SMP
    724727    /** Array of per CPU data for SUPGIPMODE_ASYNC_TSC. */
    725728    struct LINUXCPU
     
    734737        VBOXKTIMER          Timer;
    735738    }                       aCPUs[256];
    736 # endif
    737 #endif
     739#  endif
     740# endif /* LINUX */
     741#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
    738742} SUPDRVDEVEXT;
    739743
     
    762766void  VBOXCALL  supdrvOSGipResume(PSUPDRVDEVEXT pDevExt);
    763767void  VBOXCALL  supdrvOSGipSuspend(PSUPDRVDEVEXT pDevExt);
     768#endif
     769#ifdef RT_OS_WINDOWS /** @todo remove when RTMpGetCount() has been fixed. */
    764770unsigned VBOXCALL supdrvOSGetCPUCount(PSUPDRVDEVEXT pDevExt);
     771#endif
    765772bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt);
    766 #endif
    767773
    768774
  • trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c

    r9444 r9470  
    253253static int      supdrvGipCreate(PSUPDRVDEVEXT pDevExt);
    254254static void     supdrvGipDestroy(PSUPDRVDEVEXT pDevExt);
    255 static DECLCALLBACK(void) supdrvGipTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
     255static DECLCALLBACK(void) supdrvGipSyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
     256static DECLCALLBACK(void) supdrvGipAsyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick);
     257static DECLCALLBACK(void) supdrvGipMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser);
    256258#endif
    257259
     
    37483750
    37493751    /*
    3750      * Find a reasonable update interval, something close to 10ms would be nice,
    3751      * and create a recurring timer.
     3752     * Find a reasonable update interval and initialize the structure.
    37523753     */
    37533754    u32Interval = u32SystemResolution = RTTimerGetSystemGranularity();
     
    37553756        u32Interval += u32SystemResolution;
    37563757
    3757     rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, 0, supdrvGipTimer, pDevExt);
    3758     if (RT_FAILURE(rc))
    3759     {
    3760         OSDBGPRINT(("supdrvGipCreate: failed create GIP timer at %RU32 ns interval. rc=%d\n", u32Interval, rc));
     3758    supdrvGipInit(pDevExt, pGip, HCPhysGip, RTTimeSystemNanoTS(), 1000000000 / u32Interval /*=Hz*/);
     3759
     3760    /*
     3761     * Create the timer.
     3762     * If CPU_ALL isn't supported we'll have to fall back to synchronous mode.
     3763     */
     3764    if (pGip->u32Mode == SUPGIPMODE_ASYNC_TSC)
     3765    {
     3766        rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, RTTIMER_FLAGS_CPU_ALL, supdrvGipAsyncTimer, pDevExt);
     3767        if (rc == VERR_NOT_SUPPORTED)
     3768        {
     3769            OSDBGPRINT(("supdrvGipCreate: omni timer not supported, falling back to synchronous mode\n"));
     3770            pGip->u32Mode = SUPGIPMODE_SYNC_TSC;
     3771        }
     3772    }
     3773    if (pGip->u32Mode != SUPGIPMODE_ASYNC_TSC)
     3774        rc = RTTimerCreateEx(&pDevExt->pGipTimer, u32Interval, 0, supdrvGipSyncTimer, pDevExt);
     3775    if (RT_SUCCESS(rc))
     3776    {
     3777        if (pGip->u32Mode == SUPGIPMODE_ASYNC_TSC)
     3778            rc = RTMpNotificationRegister(supdrvGipMpEvent, pDevExt);
     3779        if (RT_SUCCESS(rc))
     3780        {
     3781            /*
     3782             * We're good.
     3783             */
     3784            dprintf(("supdrvGipCreate: %ld ns interval.\n", (long)u32Interval));
     3785            return VINF_SUCCESS;
     3786        }
     3787
     3788        OSDBGPRINT(("supdrvGipCreate: failed register MP event notfication. rc=%d\n", rc));
     3789    }
     3790    else
     3791    {
     3792        OSDBGPRINT(("supdrvGipCreate: failed create GIP timer at %ld ns interval. rc=%d\n", (long)u32Interval, rc));
    37613793        Assert(!pDevExt->pGipTimer);
    3762         supdrvGipDestroy(pDevExt);
    3763         return rc;
    3764     }
    3765 
    3766     /*
    3767      * We're good.
    3768      */
    3769     supdrvGipInit(pDevExt, pGip, HCPhysGip, RTTimeSystemNanoTS(), 1000000000 / u32Interval /*=Hz*/);
    3770     return VINF_SUCCESS;
     3794    }
     3795    supdrvGipDestroy(pDevExt);
     3796    return rc;
    37713797}
    37723798
     
    38223848
    38233849/**
    3824  * Timer callback function.
     3850 * Timer callback function sync GIP mode.
    38253851 * @param   pTimer      The timer.
    38263852 * @param   pvUser      The device extension.
    3827  * @param   iTick       The current tick.
    3828  */
    3829 static DECLCALLBACK(void) supdrvGipTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
     3853 */
     3854static DECLCALLBACK(void) supdrvGipSyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
    38303855{
    38313856    PSUPDRVDEVEXT pDevExt  = (PSUPDRVDEVEXT)pvUser;
    38323857    supdrvGipUpdate(pDevExt->pGip, RTTimeSystemNanoTS());
    3833     NOREF(iTick);
    3834 }
     3858}
     3859
     3860
     3861/**
     3862 * Timer callback function for async GIP mode.
     3863 * @param   pTimer      The timer.
     3864 * @param   pvUser      The device extension.
     3865 */
     3866static DECLCALLBACK(void) supdrvGipAsyncTimer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
     3867{
     3868    PSUPDRVDEVEXT   pDevExt = (PSUPDRVDEVEXT)pvUser;
     3869    RTCPUID         idCpu   = RTMpCpuId();
     3870    uint64_t        NanoTS  = RTTimeSystemNanoTS();
     3871
     3872    if (pDevExt->idGipMaster == idCpu)
     3873        supdrvGipUpdate(pDevExt->pGip, NanoTS);
     3874    else
     3875        supdrvGipUpdatePerCpu(pDevExt->pGip, NanoTS, ASMGetApicId());
     3876}
     3877
     3878
     3879/**
     3880 * Multiprocessor event notification callback.
     3881 *
     3882 * This is used to make sue that the GIP master gets passed on to
     3883 * another CPU.
     3884 *
     3885 * @param   enmEvent    The event.
     3886 * @param   idCpu       The cpu it applies to.
     3887 * @param   pvUser      Pointer to the device extension.
     3888 */
     3889static DECLCALLBACK(void) supdrvGipMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser)
     3890{
     3891    PSUPDRVDEVEXT   pDevExt = (PSUPDRVDEVEXT)pvUser;
     3892    if (enmEvent == RTMPEVENT_OFFLINE)
     3893    {
     3894        RTCPUID idGipMaster;
     3895        ASMAtomicReadSize(&pDevExt->idGipMaster, &idGipMaster);
     3896        if (idGipMaster == idCpu)
     3897        {
     3898            /*
     3899             * Find a new GIP master.
     3900             */
     3901            bool        fIgnored;
     3902            unsigned    i;
     3903            RTCPUID     idNewGipMaster = NIL_RTCPUID;
     3904            RTCPUSET    OnlineCpus;
     3905            RTMpGetOnlineSet(&OnlineCpus);
     3906
     3907            for (i = 0; i < RTCPUSET_MAX_CPUS; i++)
     3908            {
     3909                RTCPUID idCurCpu = RTMpCpuIdFromSetIndex(i);
     3910                if (    RTCpuSetIsMember(&OnlineCpus, idCurCpu)
     3911                    &&  idCurCpu != idGipMaster)
     3912                {
     3913                    idNewGipMaster = idCurCpu;
     3914                    break;
     3915                }
     3916            }
     3917
     3918            dprintf(("supdrvGipMpEvent: Gip master %#lx -> %#lx\n", (long)idGipMaster, (long)idNewGipMaster));
     3919            ASMAtomicCmpXchgSize(&pDevExt->idGipMaster, idNewGipMaster, idGipMaster, fIgnored);
     3920            NOREF(fIgnored);
     3921        }
     3922    }
     3923}
     3924
    38353925#endif /* USE_NEW_OS_INTERFACE_FOR_GIP */
    38363926
     
    39073997static SUPGIPMODE supdrvGipDeterminTscMode(PSUPDRVDEVEXT pDevExt)
    39083998{
    3909 #ifndef USE_NEW_OS_INTERFACE_FOR_GIP
    39103999    /*
    39114000     * The problem here is that AMD processors with power management features
     
    39194008     * can be relied upon to have somewhat uniform TSC between the cpus.
    39204009     */
     4010# ifdef RT_OS_WINDOWS /** @todo fix RTMpGetCount() wrt to IRQL. */
    39214011    if (supdrvOSGetCPUCount(pDevExt) > 1)
     4012# else
     4013    if (RTMpGetCount() > 1)
     4014# endif
    39224015    {
    39234016        uint32_t uEAX, uEBX, uECX, uEDX;
    39244017
    3925         /* Permit user users override. */
     4018        /* Permit the user and/or the OS specfic bits to force async mode. */
    39264019        if (supdrvOSGetForcedAsyncTscMode(pDevExt))
    39274020            return SUPGIPMODE_ASYNC_TSC;
     4021
     4022        /** @todo perform supdrvDetermineAsyncTsc here! */
    39284023
    39294024        /* Check for "AuthenticAMD" */
     
    39344029            &&  uEDX == X86_CPUID_VENDOR_AMD_EDX)
    39354030        {
     4031            /** @todo This is probably wrong. TscInvariant doesn't seem to mean that RdTSC returns the
     4032             * value everywhere, but rather that the rate is supposed to be the same. */
    39364033            /* Check for APM support and that TscInvariant is cleared. */
    39374034            ASMCpuId(0x80000000, &uEAX, &uEBX, &uECX, &uEDX);
     
    39454042        }
    39464043    }
    3947 #endif
    39484044    return SUPGIPMODE_SYNC_TSC;
    39494045}
  • trunk/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c

    r7272 r9470  
    531531}
    532532
     533bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
     534{
     535    return false;
     536}
     537
    533538
    534539SUPR0DECL(int) SUPR0Printf(const char *pszFormat, ...)
  • trunk/src/VBox/HostDrivers/Support/linux/Makefile

    r8155 r9470  
    7575        r0drv/alloc-r0drv.o \
    7676        r0drv/initterm-r0drv.o \
    77         r0drv/linux/mp-r0drv-linux.o \
     77        r0drv/mpnotification-r0drv.o \
    7878        r0drv/linux/alloc-r0drv-linux.o \
    7979        r0drv/linux/initterm-r0drv-linux.o \
     80        r0drv/linux/mp-r0drv-linux.o \
     81        r0drv/linux/mpnotification-r0drv-linux.o \
    8082        r0drv/linux/process-r0drv-linux.o \
    8183        r0drv/linux/semevent-r0drv-linux.o \
     
    8385        r0drv/linux/semfastmutex-r0drv-linux.o \
    8486        r0drv/linux/spinlock-r0drv-linux.o \
    85         r0drv/linux/thread-r0drv-linux.o
     87        r0drv/linux/thread-r0drv-linux.o \
     88        r0drv/linux/time-r0drv-linux.o \
     89        r0drv/linux/timer-r0drv-linux.o \
     90        common/err/RTErrConvertFromErrno.o
    8691ifeq ($(BUILD_TARGET_ARCH),amd64)
    8792OBJS  += alloc/heapsimple.o
     
    223228# If this makes testboxes crash/burn/leak disable it and add a comment to defect #2116.
    224229#
    225 KFLAGS += -DUSE_NEW_OS_INTERFACE_FOR_MM
     230KFLAGS += -DUSE_NEW_OS_INTERFACE_FOR_MM -DUSE_NEW_OS_INTERFACE_FOR_GIP
    226231OBJS += r0drv/memobj-r0drv.o \
    227232        r0drv/linux/memobj-r0drv-linux.o
  • trunk/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c

    r9236 r9470  
    1 /* $Rev:$ */
     1/* $Rev$ */
    22/** @file
    33 * The VirtualBox Support Driver - Linux hosts.
     
    199199#define str(s) #s
    200200
     201
    201202/*******************************************************************************
    202 *   Defined Constants And Macros                                               *
     203*   Structures and Typedefs                                                    *
    203204*******************************************************************************/
     205#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
     206# ifdef VBOX_HRTIMER
     207typedef enum hrtimer_restart (*PFNVBOXKTIMER)(struct hrtimer *);
     208# else
     209typedef void (*PFNVBOXKTIMER)(unsigned long);
     210# endif
     211#endif
     212
     213
     214/*******************************************************************************
     215*   Global Variables                                                           *
     216*******************************************************************************/
    204217/**
    205218 * Device extention & session data association structure.
     
    207220static SUPDRVDEVEXT         g_DevExt;
    208221
     222#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
    209223/** Timer structure for the GIP update. */
    210224static VBOXKTIMER           g_GipTimer;
    211225/** Pointer to the page structure for the GIP. */
    212226struct page                *g_pGipPage;
     227#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
    213228
    214229/** Registered devfs device handle. */
     
    254269*   Internal Functions                                                         *
    255270*******************************************************************************/
    256 #ifdef VBOX_HRTIMER
    257 typedef enum hrtimer_restart (*PFNVBOXKTIMER)(struct hrtimer *);
    258 #else
    259 typedef void (*PFNVBOXKTIMER)(unsigned long);
    260 #endif
    261 
    262271static int      VBoxDrvLinuxInit(void);
    263272static void     VBoxDrvLinuxUnload(void);
     
    270279#endif
    271280static int      VBoxDrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
     281#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
    272282static int      VBoxDrvLinuxInitGip(PSUPDRVDEVEXT pDevExt);
    273283static int      VBoxDrvLinuxTermGip(PSUPDRVDEVEXT pDevExt);
    274 #ifdef VBOX_HRTIMER
     284# ifdef VBOX_HRTIMER
    275285static enum hrtimer_restart VBoxDrvLinuxGipTimer(struct hrtimer *pTimer);
    276 #else
     286# else
    277287static void     VBoxDrvLinuxGipTimer(unsigned long ulUser);
    278 #endif
    279 #ifdef CONFIG_SMP
    280 # ifdef VBOX_HRTIMER
     288# endif
     289# ifdef CONFIG_SMP
     290#  ifdef VBOX_HRTIMER
    281291static enum hrtimer_restart VBoxDrvLinuxGipTimerPerCpu(struct hrtimer *pTimer);
    282 # else
     292#  else
    283293static void     VBoxDrvLinuxGipTimerPerCpu(unsigned long ulUser);
    284 # endif
     294#  endif
    285295static void     VBoxDrvLinuxGipResumePerCpu(void *pvUser);
    286 #endif
     296# endif /* CONFIG_SMP */
     297#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
    287298static int      VBoxDrvLinuxErr2LinuxErr(int);
    288299
     
    315326#endif
    316327
     328
     329#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
     330
    317331static inline void vbox_ktimer_init(PVBOXKTIMER pTimer, PFNVBOXKTIMER pfnFunction, unsigned long ulData)
    318332{
     
    346360#endif
    347361}
     362
     363#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
     364
    348365
    349366#ifdef CONFIG_X86_LOCAL_APIC
     
    641658        if (RT_SUCCESS(rc))
    642659        {
     660            rc = RTR0MpNotificationInit(NULL);
     661            if (RT_SUCCESS(rc))
     662            {
    643663#ifdef RT_ARCH_AMD64
    644             rc = RTR0MemExecDonate(&g_abExecMemory[0], sizeof(g_abExecMemory));
    645 #endif
    646             /*
    647              * Initialize the device extension.
    648              */
    649             if (RT_SUCCESS(rc))
    650                 rc = supdrvInitDevExt(&g_DevExt);
    651             if (!rc)
    652             {
     664                rc = RTR0MemExecDonate(&g_abExecMemory[0], sizeof(g_abExecMemory));
     665#endif
    653666                /*
    654                  * Create the GIP page.
     667                 * Initialize the device extension.
    655668                 */
    656                 rc = VBoxDrvLinuxInitGip(&g_DevExt);
     669                if (RT_SUCCESS(rc))
     670                    rc = supdrvInitDevExt(&g_DevExt);
    657671                if (!rc)
    658672                {
    659                     printk(KERN_INFO DEVICE_NAME ": TSC mode is %s, kernel timer mode is "
     673#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
     674                    /*
     675                     * Create the GIP page.
     676                     */
     677                    rc = VBoxDrvLinuxInitGip(&g_DevExt);
     678                    if (!rc)
     679#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
     680                    {
     681                        printk(KERN_INFO DEVICE_NAME ": TSC mode is %s, kernel timer mode is "
    660682#ifdef VBOX_HRTIMER
    661                            "'high-res'"
    662 #else
    663                            "'normal'"
    664 #endif
    665                            ".\n",
    666                            g_DevExt.pGip->u32Mode == SUPGIPMODE_SYNC_TSC ? "'synchronous'" : "'asynchronous'");
    667                     LogFlow(("VBoxDrv::ModuleInit returning %#x\n", rc));
    668                     printk(KERN_DEBUG DEVICE_NAME ": Successfully loaded version "
    669                            VBOX_VERSION_STRING " (interface " xstr(SUPDRVIOC_VERSION) ").\n");
    670                     return rc;
     683                               "'high-res'"
     684#else
     685                               "'normal'"
     686#endif
     687                               ".\n",
     688                               g_DevExt.pGip->u32Mode == SUPGIPMODE_SYNC_TSC ? "'synchronous'" : "'asynchronous'");
     689                        LogFlow(("VBoxDrv::ModuleInit returning %#x\n", rc));
     690                        printk(KERN_DEBUG DEVICE_NAME ": Successfully loaded version "
     691                               VBOX_VERSION_STRING " (interface " xstr(SUPDRVIOC_VERSION) ").\n");
     692                        return rc;
     693                    }
     694
     695                    supdrvDeleteDevExt(&g_DevExt);
    671696                }
    672 
    673                 supdrvDeleteDevExt(&g_DevExt);
     697                else
     698                    rc = -EINVAL;
     699                RTR0MpNotificationTerm(NULL);
    674700            }
    675             else
    676                 rc = -EINVAL;
    677701            RTR0Term();
    678702        }
     
    730754     * Destroy GIP, delete the device extension and terminate IPRT.
    731755     */
     756#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
    732757    VBoxDrvLinuxTermGip(&g_DevExt);
     758#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
    733759    supdrvDeleteDevExt(&g_DevExt);
    734760    RTR0Term();
     
    947973}
    948974
     975
     976#ifndef USE_NEW_OS_INTERFACE_FOR_GIP
    949977
    950978/**
     
    13651393}
    13661394
    1367 
    1368 /**
    1369  * Get the current CPU count.
    1370  * @returns Number of cpus.
    1371  */
    1372 unsigned VBOXCALL supdrvOSGetCPUCount(PSUPDRVDEVEXT pDevExt)
    1373 {
    1374 #ifdef CONFIG_SMP
    1375 # if defined(num_present_cpus) && !defined(VBOX_REDHAT_KABI)
    1376     return num_present_cpus();
    1377 # elif defined(num_possible_cpus)
    1378     return num_possible_cpus();
    1379 # else
    1380     return smp_num_cpus;
    1381 # endif
    1382 #else
    1383     return 1;
    1384 #endif
    1385 }
    1386 
    1387 /**
    1388  * Force async tsc mode.
    1389  * @todo add a module argument for this.
    1390  */
     1395#endif /* !USE_NEW_OS_INTERFACE_FOR_GIP */
     1396
     1397
    13911398bool VBOXCALL  supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
    13921399{
     
    14751482
    14761483
    1477 /* GCC C++ hack. */
     1484/* GCC C++ hack. (shouldn't be necessary...) */
    14781485unsigned __gxx_personality_v0 = 0xcccccccc;
    14791486
  • trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv

    r8155 r9470  
    6464    ${PATH_ROOT}/src/VBox/HostDrivers/Support/SUPDRVShared.c=>SUPDRVShared.c \
    6565    ${PATH_ROOT}/src/VBox/Runtime/common/alloc/heapsimple.cpp=>alloc/heapsimple.c \
     66    ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
    6667    ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
    6768    ${PATH_ROOT}/src/VBox/Runtime/common/log/logcom.cpp=>common/log/logcom.c \
     
    8990    ${PATH_ROOT}/src/VBox/Runtime/r0drv/alloc-r0drv.h=>r0drv/alloc-r0drv.h \
    9091    ${PATH_ROOT}/src/VBox/Runtime/r0drv/initterm-r0drv.cpp=>r0drv/initterm-r0drv.c \
     92    ${PATH_ROOT}/src/VBox/Runtime/r0drv/mp-r0drv.h=>r0drv/mp-r0drv.h \
     93    ${PATH_ROOT}/src/VBox/Runtime/r0drv/mpnotification-r0drv.c=>r0drv/mpnotification-r0drv.c \
    9194    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/RTLogWriteDebugger-r0drv-linux.c=>r0drv/linux/RTLogWriteDebugger-r0drv-linux.c \
    9295    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c=>r0drv/linux/alloc-r0drv-linux.c \
     
    9497    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c=>r0drv/linux/memobj-r0drv-linux.c \
    9598    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c=>r0drv/linux/mp-r0drv-linux.c \
    96     ${PATH_ROOT}/src/VBox/Runtime/r0drv/mp-r0drv.h=>r0drv/mp-r0drv.h \
     99    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/mpnotification-r0drv-linux.c=>r0drv/linux/mpnotification-r0drv-linux.c \
    97100    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/process-r0drv-linux.c=>r0drv/linux/process-r0drv-linux.c \
    98101    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/semevent-r0drv-linux.c=>r0drv/linux/semevent-r0drv-linux.c \
     
    103106    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h=>r0drv/linux/the-linux-kernel.h \
    104107    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/thread-r0drv-linux.c=>r0drv/linux/thread-r0drv-linux.c \
     108    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/time-r0drv-linux.c=>r0drv/linux/time-r0drv-linux.c \
     109    ${PATH_ROOT}/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c=>r0drv/linux/timer-r0drv-linux.c \
    105110    ${PATH_ROOT}/src/VBox/Runtime/r0drv/memobj-r0drv.cpp=>r0drv/memobj-r0drv.c \
    106111    ${PATH_ROOT}/src/VBox/Runtime/VBox/log-vbox.cpp=>VBox/log-vbox.c \
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette